Download presentation
Presentation is loading. Please wait.
1
Tree Traversals A traversal is a way of walking the tree structure Some common traversals: –pre-order traversal –in-order traversal –post-order traversal
2
(Depth-first) traversal path Fred WilmaBetty Barney Pebbles
3
Each node is reached three times Fred WilmaBetty Barney Pebbles 1 2 3 1 1 1 1 2 2 2 2 3 3 3 3
4
Pre-order traversal (1) visit node before children Fred WilmaBetty Barney Pebbles 1 1 1 1 1 Fred Betty Barney Wilma Pebbles
5
In-order traversal (2) visit node between children Fred WilmaBetty Barney Pebbles 2 2 2 2 2 Barney Betty Fred Pebbles Wilma
6
Post-order traversal (3) visit node after children Fred WilmaBetty Barney Pebbles 3 3 3 3 3 Barney Betty Pebbles Wilma Fred
7
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
8
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.
9
Behavior of an inOrderIterator > java.util.Iterator it = bst.inOrderIterator(); > System.out.println("it.hasNext() ==> "+it.hasNext()); it.hasNext() ==> true Fred WilmaBetty Barney Pebbles
10
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
11
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
12
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
13
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
14
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
15
Implementation? How is state of iterator maintained?
16
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()
17
Behavior of an inOrderIterator > java.util.Iterator it = bst.inOrderIterator(); > System.out.println("it.hasNext() ==> "+it.hasNext()); it.hasNext() ==> true Fred WilmaBetty Barney Pebbles
18
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)
19
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
20
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
21
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
22
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
23
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
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.