-
Notifications
You must be signed in to change notification settings - Fork 4
Tree Traversals
Anthony Christe edited this page Oct 30, 2013
·
4 revisions
- Similar to iterating over a list
- Often want to visit/process every element in the tree
- But... what makes sense for a tree?
- Trees are unidirectional (no links from child to parent)
- Usually use recursion (run-time stack / backtracking)
- root
- left sub-tree
- right sub-tree
def preOrderTraversal(node):
if node is null:
return
process(node)
preOrderTraversal(node.left)
preOrderTraversal(node.right)
5
/ \
2 8
/ \ \
1 3 15
/ \
13 22
/
12
Pre-order: 5, 2, 1, 3, 8, 15, 13, 12, 22
- left sub-tree
- root
- right sub-tree
def inOrderTraversal(node):
if node is null:
return
inOrderTraversal(node.left)
process(node)
inOrderTraversal(node.right)
What's so special about running an in-order traversal on a BST?
5
/ \
2 8
/ \ \
1 3 15
/ \
13 22
/
12
In-order: 1, 2, 3, 5, 8, 12, 13, 15, 22
- left sub-tree
- right sub-tree
- root
def postOrderTraversal(node):
if node is null:
return
postOrderTraversal(node.left)
postOrderTraversal(node.right)
process(node)
5
/ \
2 8
/ \ \
1 3 15
/ \
13 22
/
12
Post-order: 1, 3, 2, 12, 13, 22, 15, 8, 5
- Instead of working our way down one side of the tree, visit nodes by level
- Visit nodes moving from left-to-right, top-to-bottom
- Can use a queue to determine order
def levelOrder(node):
queue.offer(node)
while queue is not empty:
n = queue.poll()
offer ns children to queue
process(n)
5
/ \
2 8
/ \ \
1 3 15
/ \
13 22
/
12
Level-order: 5, 2, 8, 1, 3, 15, 13, 22, 12
- Can switch order of visiting left, right first
- Can do BFS by visiting right-to-left, top-to-bottom
- Etc.... pre-order, in-order, post-order are most common
-
Write out the order in which nodes are visited using pre-order, in-order, post-order, and breadth-first level-order for the following tree
2 / \ 7 5 / \ \ 2 6 9 / \ / 5 11 4
- Binary tree
- Interior nodes contain operators
- Leaf nodes contain operands
- Depth-first traversals provide prefix, infix, and postfix expression