Presentation is loading. Please wait.

Presentation is loading. Please wait.

Tree Traversals A traversal is a way of walking the tree structure Some common traversals: –pre-order traversal –in-order traversal –post-order traversal.

Similar presentations


Presentation on theme: "Tree Traversals A traversal is a way of walking the tree structure Some common traversals: –pre-order traversal –in-order traversal –post-order traversal."— Presentation transcript:

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


Download ppt "Tree Traversals A traversal is a way of walking the tree structure Some common traversals: –pre-order traversal –in-order traversal –post-order traversal."

Similar presentations


Ads by Google