Given inorder and postorder traversal of a tree, construct the binary tree.
public TreeNode buildTree(int[] inorder, int[] postorder) {
int size = inorder.length;
if(size ==0) return null;
return buildNodes1(inorder, postorder, 0, inorder.length-1, 0, postorder.length-1);
}
private TreeNode buildNodes1(int[] inorder,int[] postorder,int istart, int iend, int pstart, int pend){
if(pstart > pend) return null;
int point = postorder[pend];
int i;
for(i = istart;i< iend;i++){
if (inorder[i]==point) {
break;
}
}
TreeNode treeNode = new TreeNode(point);
int leftSize = i- istart;
treeNode.left = buildNodes1(inorder, postorder, istart, i-1, pstart, pstart+leftSize-1);
treeNode.right = buildNodes1(inorder, postorder, i+1, iend, pstart+leftSize, pend-1);
return treeNode;
}