0% found this document useful (0 votes)
105 views12 pages

Binary Tree Traversals

The document discusses different methods for traversing binary trees, including breadth-first traversal, depth-first traversal (preorder, inorder, and postorder), and using an iterator. It provides code examples for implementing these traversals and using an iterator to traverse the tree in preorder.

Uploaded by

andi arfian
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
105 views12 pages

Binary Tree Traversals

The document discusses different methods for traversing binary trees, including breadth-first traversal, depth-first traversal (preorder, inorder, and postorder), and using an iterator. It provides code examples for implementing these traversals and using an iterator to traverse the tree in preorder.

Uploaded by

andi arfian
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 12

Binary Tree Traversals

• Binary Tree Traversal classification

• BreadthFirst traversal

• DepthFirst traversal

• Accept method of BinaryTree class

• Binary Tree Iterator

1
Tree Traversal (Definition)
• The process of systematically visiting all the nodes in a tree and
performing some computation at each node in the tree is called a
tree traversal.

• There are two methods in which to traverse a tree:


1. Breadth-First Traversal.
2. Depth-First Traversal:
• Preorder traversal
• Inorder traversal (for binary trees only)
• Postorder traversal

2
Breadth-First Traversal
• The BinaryTree class breadthFirstTraversal method:

public void breadthFirstTraversal(Visitor visitor){


QueueAsLinkedList queueaslinkedlist =
new QueueAsLinkedList();
if(!isEmpty()) queueaslinkedlist.enqueue(this);
while(!queueaslinkedlist.isEmpty() &&
!visitor.isDone()){
BinaryTree tree =
(BinaryTree)queueaslinkedlist.dequeue();
visitor.visit(tree.getKey());
if (!tree.getLeft().isEmpty())
queueaslinkedlist.enqueue(tree.getLeft());
if (!tree.getRight().isEmpty())
queueaslinkedlist.enqueue(tree.getRight());
}
}

3
Breadth-First Traversal

D L

B F J N

A C E G I K M O

O M K I G E C A N J F B L D H
4
Depth-First Traversals

CODE for each Node: Name


public void preorderTraversal(Visitor v){
if(!isEmpty() && ! v.isDone()){
v.visit(getKey()); •Visit the node
Preorder
getLeft().preorderTraversal(v); •Visit the left subtree, if any.
getRight().preorderTraversal(v); (N-L-R)
•Visit the right subtree, if any.
}
}
public void inorderTraversal(Visitor v){
if(!isEmpty() && ! v.isDone()){
getLeft().inorderTraversal(v); •Visit the left subtree, if any.
Inorder
v.visit(getKey()); Visit the node
(L-N-R)
getRight().inorderTraversal(v); •Visit the right subtree, if any.
}
}
public void postorderTraversal(Visitor v){
if(!isEmpty() && ! v.isDone()){
getLeft().postorderTraversal(v) ; •Visit the left subtree, if any.
Postorder
getRight().postorderTraversal(v); •Visit the right subtree, if any.
v.visit(getKey()); (L-R-N)
•Visit the node
}
} 5
Depth-first Preorder Traversal

N-L-R
H

D L

B F J N

A C E G I K M O

O M N K I J L G E F C A B D H
6
Depth-first Inorder Traversal
L-N-R
H

D L

B F J N

A C E G I K M O

O N M L K J I H G F E D C B A

.Note: An inorder traversal of a BST visits the keys sorted in increasing order

7
Depth-first Postorder Traversal

L-R-N
H

D L

B F J N

A C E G I K M O

H L N O M J K I D F G E B C A
8
Traversals

• The following code illustrates how to display the contents


of a Binary tree using each traversal method.

Visitor v = new PrintingVisitor() ;


BinaryTree t = new BinaryTree() ;
// . . .
t.breadthFirstTraversal(v) ;
t.postorderTraversal(v) ;
t.inorderTraversal(v) ;
t.postorderTraversal(v) ;

9
The accept method of the BinaryTree class

• Usually the accept method of a container is allowed to


visit the elements of the container in any order.
• A depth-first tree traversal visits the nodes in either
preoder or postorder and for Binary trees inorder
traversal is also possible.
• The BinaryTree class accept method does a preorder
traversal:

public void accept(Visitor visitor)


{
preorderTraversal(visitor) ;
}

10
Binary Tree Iterator
• The BinaryTree class provides a tree iterator that does a preorder
traversal. The iterator is implemented as an inner class:

private class BinaryTreeIterator implements Iterator{


Stack stack;

public BinaryTreeIterator(){
stack = new StackAsLinkedList();
if(!isEmpty())stack.push(BinaryTree.this);
}

public boolean hasNext(){return !stack.isEmpty();}

public Object next(){


if(stack.isEmpty())throw new NoSuchElementException();
BinaryTree tree = (BinaryTree)stack.pop();
if (!tree.getRight().isEmpty()) stack.push(tree.getRight());
if (!tree.getLeft().isEmpty()) stack.push(tree.getLeft());
return tree.getKey();
}
} 11
Using a Binary Tree Iterator
• The iterator() method of the BinaryTree class returns a new instance of
the BinaryTreeIterator inner class each time it is called:
public Iterator iterator(){
return new BinaryTreeIterator();
}

• The following program fragment shows how to use a tree iterator:

BinaryTree tree = new BinaryTree() ;


// . . .
Iterator i = tree.iterator() ;
while(i.hasNext(){
Object obj = e.next() ;
System.out.print(obj + " ") ;
}
12

You might also like