Tuesday 13 August 2013

Tree Traversal


Unlike the linear data structures(like array, linked list), Tree can be traversed in different ways.
Following are the ways for traversing the Tree.
1. Pre-order Traversal
2. Post-order Traversal
3. In-order Traversal
4. Level Order Traversal

1. Pre-order Traversal:
       In this traversal, first we visit the current node, then left sub tree and then right sub tree.
       In order to illustrate the pre-order traversal, let us consider the below binary tree: 
   

          Algorithm:
                PreOrder(TreeNode root)                             
if root is null Then return                          

Visit the root                                          
PreOrder(root.left)                                 
PreOrder(root.right)                               

 2. Post-order Traversal:
       In this traversal, first we traverse the left sub tree, then right sub tree and then current node.
       In order to illustrate the post-order traversal, let us consider the below binary tree: 
 
            Algorithm:
                PostOrder(TreeNode root)
if root is null Then return

PostOrder(root.left)
PostOrder(root.right)
                    Visit the root

3. In-order Traversal:
        In this traversal, first we traverse left sub tree then current node and then right sub tree.
        In order to illustrate the in-order traversal, let us consider the below binary tree: 
     


         Algorithm:
                inorder(TreeNode root)
if root is null Then return

inorder(root.left)
                    Visit the root
inorder(root.right)
                 

Implementation:

class MirrorOfBinaryTree{
//Tree structure
static class Tree{
int data;
Tree left = null;
Tree right = null;

public Tree(int data){
this.data = data;
}

//Utility to create the tree
public static Tree createBST(int []a, int left, int right){
if(right < left)
return null;

int mid = (left + right)/2;
Tree root = new Tree(a[mid]);
root.left = createBST(a, left, mid - 1);
root.right = createBST(a, mid + 1, right);

return root;
}

//Pre-order traversal
public static void preOrder(Tree root){                              
if(root != null){                                                              
System.out.print(root.data+" ");  //Visit the root       
preOrder(root.left);  //Traverse the left sub tree      
preOrder(root.right); //Traverse the right sub tree  
}                                                                                   
}                                                                                          

              public static void inOrder(Tree root){          
                        if(root != null){                                       
                           inOrder(root.left);                            
                           System.out.print(root.data+" ");       
                           inOrder(root.right);                          
                       }                                                             
              }                                                                    


             public static void postOrder(Tree root){        
                     if(root != null){                                         
  postOrder(root.left);                           
postOrder(root.right);                         
System.out.print(root.data+" ");          
                     }                                                              
            }                                                                    

}

public static void main(String []args){
int []a = {1,2,3,4,5,6,7};

Tree root = Tree.createBST(a , 0, a.length - 1);   //create the tree
Tree.preOrder(root);
}
}

No comments:

Post a Comment