package com.interview.tree;
/**
* http://www.geeksforgeeks.org/full-and-complete-binary-tree-from-given-preorder-and-postorder-traversals/
* Full tree is a tree with all nodes with either 0 or 2 child. Never has 1 child.
* Test cases
* Empty tree
* Tree with big on left side
* Tree with big on right side
*/
public class ConstructFullTreeFromPreOrderPostOrder {
public Node constructTree(int preorder[],int postorder[]){
return constructTree(preorder, postorder, 0, postorder.length-2, 0);
}
private Node constructTree(int preorder[],int postorder[],int low,int high,int index){
if(low > high || index >= preorder.length-1){
Node node = new Node();
node.data = preorder[index];
return node;
}
Node node = new Node();
node.data = preorder[index];
int i=0;
for(i=low; i <= high; i++){
if(preorder[index+1] == postorder[i]){
break;
}
}
node.left = constructTree(preorder, postorder, low, i-1, index+1);
node.right = constructTree(preorder, postorder, i+1, high-1, index + i-low+2);
return node;
}
public static void main(String args[]){
ConstructFullTreeFromPreOrderPostOrder cft = new ConstructFullTreeFromPreOrderPostOrder();
int preorder[] = {1,2,3,6,7,8,9};
int postorder[] = {2,6,8,9,7,3,1};
Node root = cft.constructTree(preorder, postorder);
TreeTraversals tt = new TreeTraversals();
tt.inOrder(root);
tt.preOrder(root);
tt.postOrder(root);
}
}