Binary Tree
Binary Tree
In a traversal of a binary tree, each element of the binary tree is visited exactly once. During the visit of an element, all action (make a clone, display, evaluate the operator, etc.) with respect to this element is taken.
Preorder Traversal
public static void preOrder(BinaryTreeNode t) { if (t != null) { visit(t); preOrder(t.leftChild); preOrder(t.rightChild); } }
abc
abdghei cf j
Inorder Traversal
public static void inOrder(BinaryTreeNode t) { if (t != null) { inOrder(t.leftChild); visit(t); inOrder(t.rightChild); } }
bac
gdhbei af j c
g d h
i a
f jc
a + b
* c - d/
Postorder Traversal
public static void postOrder(BinaryTreeNode t) { if (t != null) { postOrder(t.leftChild); postOrder(t.rightChild); visit(t); } }
bca
ghdi ebj f ca
Level Order
Let t be the tree root. while (t != null) { visit t and put its children on a FIFO queue; remove a node from the FIFO queue and call it t; // remove returns null when queue is empty }
abcdef ghi j
Some Examples
preorder = ab inorder = ab postorder = ab level order = ab
a b b a b a a b a b b a a b a b
Preorder and postorder do not uniquely define a binary tree. Nor do preorder and level order (same example). Nor do postorder and level order (same example).
preorder = a b d g h e i c f j b is the next root; gdh are in the left subtree; ei are in the right subtree.
a b gdh ei fjc
preorder = a b d g h e i c f j d is the next root; g is in the left subtree; h is in the right subtree.
a b d g h ei fjc
inorder = g d h b e i a f j c postorder = g h d i e b j f c a
Tree root is a; gdhbei are in left subtree; fjc are in right subtree.