Tree Traversals A traversal is a way of walking the tree structure Some common traversals:...

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

    22-Dec-2015
  • Category

    Documents

  • view

    231
  • download

    0

Transcript of Tree Traversals A traversal is a way of walking the tree structure Some common traversals:...

Tree Traversals

• A traversal is a way of walking the tree structure

• Some common traversals:– pre-order traversal– in-order traversal– post-order traversal

(Depth-first) traversal path

Fred

WilmaBetty

Barney Pebbles

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

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?

• How is state of iterator maintained?

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