Date post: | 22-Dec-2015 |
Category: |
Documents |
View: | 231 times |
Download: | 0 times |
Tree Traversals
• A traversal is a way of walking the tree structure
• Some common traversals:– pre-order traversal– in-order traversal– post-order traversal
Pre-order traversal (1)visit node before children
Fred
WilmaBetty
Barney Pebbles
1
1
1
1
1
Fred Betty Barney Wilma Pebbles
In-order traversal (2)visit node between children
Fred
WilmaBetty
Barney Pebbles
2
2
2
2
2
Barney Betty Fred Pebbles Wilma
Post-order traversal (3)visit node after children
Fred
WilmaBetty
Barney Pebbles 3
3
3
3
3
Barney Betty Pebbles Wilma Fred
Example
Fred
WilmaBetty
Barney Pebbles
Pre-order traversal:Fred Betty Barney Wilma Pebbles
In-order traversal:Barney Betty Fred Pebbles Wilma
Post-order traversal:Barney Betty Pebbles Wilma Fred
Tree iterators
• We can define tree iterators which follow the same traversal path.
• Unlike the visitors, iterators stop at each node: they must remember where they are!
• Let us consider first an in-order iterator.
Behavior of an inOrderIterator> java.util.Iterator it = bst.inOrderIterator();> System.out.println("it.hasNext() ==> "+it.hasNext());it.hasNext() ==> true
Fred
WilmaBetty
Barney Pebbles
Behavior of an inOrderIterator> java.util.Iterator it = bst.inOrderIterator();> System.out.println("it.hasNext() ==> "+it.hasNext());it.hasNext() ==> true> System.out.println("it.next() ==> " + it.next());it.next() ==> Barney> System.out.println("it.hasNext() ==> "+it.hasNext());it.hasNext() ==> true
Fred
WilmaBetty
Barney Pebbles
Behavior of an inOrderIterator> java.util.Iterator it = bst.inOrderIterator();> System.out.println("it.hasNext() ==> "+it.hasNext());it.hasNext() ==> true> System.out.println("it.next() ==> " + it.next());it.next() ==> Barney> System.out.println("it.hasNext() ==> "+it.hasNext());it.hasNext() ==> true> System.out.println("it.next() ==> " + it.next());it.next() ==> Betty> System.out.println("it.hasNext() ==> "+it.hasNext());it.hasNext() ==> true
Fred
WilmaBetty
Barney Pebbles
Behavior of an inOrderIterator> java.util.Iterator it = bst.inOrderIterator();> System.out.println("it.hasNext() ==> "+it.hasNext());it.hasNext() ==> true> System.out.println("it.next() ==> " + it.next());it.next() ==> Barney> System.out.println("it.hasNext() ==> "+it.hasNext());it.hasNext() ==> true> System.out.println("it.next() ==> " + it.next());it.next() ==> Betty> System.out.println("it.hasNext() ==> "+it.hasNext());it.hasNext() ==> true> System.out.println("it.next() ==> " + it.next());it.next() ==> Fred> System.out.println("it.hasNext() ==> "+it.hasNext());it.hasNext() ==> true
Fred
WilmaBetty
Barney Pebbles
Behavior of an inOrderIterator> java.util.Iterator it = bst.inOrderIterator();> System.out.println("it.hasNext() ==> "+it.hasNext());it.hasNext() ==> true> System.out.println("it.next() ==> " + it.next());it.next() ==> Barney> System.out.println("it.hasNext() ==> "+it.hasNext());it.hasNext() ==> true> System.out.println("it.next() ==> " + it.next());it.next() ==> Betty> System.out.println("it.hasNext() ==> "+it.hasNext());it.hasNext() ==> true> System.out.println("it.next() ==> " + it.next());it.next() ==> Fred> System.out.println("it.hasNext() ==> "+it.hasNext());it.hasNext() ==> true> System.out.println("it.next() ==> " + it.next());it.next() ==> Pebbles> System.out.println("it.hasNext() ==> "+it.hasNext());it.hasNext() ==> true
Fred
WilmaBetty
Barney Pebbles
Behavior of an inOrderIterator> java.util.Iterator it = bst.inOrderIterator();> System.out.println("it.hasNext() ==> "+it.hasNext());it.hasNext() ==> true> System.out.println("it.next() ==> " + it.next());it.next() ==> Barney> System.out.println("it.hasNext() ==> "+it.hasNext());it.hasNext() ==> true> System.out.println("it.next() ==> " + it.next());it.next() ==> Betty> System.out.println("it.hasNext() ==> "+it.hasNext());it.hasNext() ==> true> System.out.println("it.next() ==> " + it.next());it.next() ==> Fred> System.out.println("it.hasNext() ==> "+it.hasNext());it.hasNext() ==> true> System.out.println("it.next() ==> " + it.next());it.next() ==> Pebbles> System.out.println("it.hasNext() ==> "+it.hasNext());it.hasNext() ==> true> System.out.println("it.next() ==> " + it.next());it.next() ==> Wilma> System.out.println("it.hasNext() ==> "+it.hasNext());it.hasNext() ==> false
Fred
WilmaBetty
Barney Pebbles
Implementation:
• Using a stack!
• On creation of the iterator, references to all nonEmpty trees along the left edge of the tree are pushed onto the stack
• hasNext() is implemented to return !_stack.isEmpty()
Behavior of an inOrderIterator> java.util.Iterator it = bst.inOrderIterator();> System.out.println("it.hasNext() ==> "+it.hasNext());it.hasNext() ==> true
Fred
WilmaBetty
Barney Pebbles
Implementation:
• The next() method pops an item off the stack, walks down its right child’s left edge (pushing BRS references onto the stack along the way)
Behavior of an inOrderIterator> java.util.Iterator it = bst.inOrderIterator();> System.out.println("it.hasNext() ==> "+it.hasNext());it.hasNext() ==> true> System.out.println("it.next() ==> " + it.next());it.next() ==> Barney> System.out.println("it.hasNext() ==> "+it.hasNext());it.hasNext() ==> true
Fred
WilmaBetty
Barney Pebbles
Behavior of an inOrderIterator> java.util.Iterator it = bst.inOrderIterator();> System.out.println("it.hasNext() ==> "+it.hasNext());it.hasNext() ==> true> System.out.println("it.next() ==> " + it.next());it.next() ==> Barney> System.out.println("it.hasNext() ==> "+it.hasNext());it.hasNext() ==> true> System.out.println("it.next() ==> " + it.next());it.next() ==> Betty> System.out.println("it.hasNext() ==> "+it.hasNext());it.hasNext() ==> true
Fred
WilmaBetty
Barney Pebbles
Behavior of an inOrderIterator> java.util.Iterator it = bst.inOrderIterator();> System.out.println("it.hasNext() ==> "+it.hasNext());it.hasNext() ==> true> System.out.println("it.next() ==> " + it.next());it.next() ==> Barney> System.out.println("it.hasNext() ==> "+it.hasNext());it.hasNext() ==> true> System.out.println("it.next() ==> " + it.next());it.next() ==> Betty> System.out.println("it.hasNext() ==> "+it.hasNext());it.hasNext() ==> true> System.out.println("it.next() ==> " + it.next());it.next() ==> Fred> System.out.println("it.hasNext() ==> "+it.hasNext());it.hasNext() ==> true
Fred
WilmaBetty
Barney Pebbles
Behavior of an inOrderIterator> java.util.Iterator it = bst.inOrderIterator();> System.out.println("it.hasNext() ==> "+it.hasNext());it.hasNext() ==> true> System.out.println("it.next() ==> " + it.next());it.next() ==> Barney> System.out.println("it.hasNext() ==> "+it.hasNext());it.hasNext() ==> true> System.out.println("it.next() ==> " + it.next());it.next() ==> Betty> System.out.println("it.hasNext() ==> "+it.hasNext());it.hasNext() ==> true> System.out.println("it.next() ==> " + it.next());it.next() ==> Fred> System.out.println("it.hasNext() ==> "+it.hasNext());it.hasNext() ==> true> System.out.println("it.next() ==> " + it.next());it.next() ==> Pebbles> System.out.println("it.hasNext() ==> "+it.hasNext());it.hasNext() ==> true
Fred
WilmaBetty
Barney Pebbles
Behavior of an inOrderIterator> java.util.Iterator it = bst.inOrderIterator();> System.out.println("it.hasNext() ==> "+it.hasNext());it.hasNext() ==> true> System.out.println("it.next() ==> " + it.next());it.next() ==> Barney> System.out.println("it.hasNext() ==> "+it.hasNext());it.hasNext() ==> true> System.out.println("it.next() ==> " + it.next());it.next() ==> Betty> System.out.println("it.hasNext() ==> "+it.hasNext());it.hasNext() ==> true> System.out.println("it.next() ==> " + it.next());it.next() ==> Fred> System.out.println("it.hasNext() ==> "+it.hasNext());it.hasNext() ==> true> System.out.println("it.next() ==> " + it.next());it.next() ==> Pebbles> System.out.println("it.hasNext() ==> "+it.hasNext());it.hasNext() ==> true> System.out.println("it.next() ==> " + it.next());it.next() ==> Wilma> System.out.println("it.hasNext() ==> "+it.hasNext());it.hasNext() ==> false
Fred
WilmaBetty
Barney Pebbles