Create a tree in order to take advantage of post-order traversal results
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
public class Test{
int[] inorder;
int[] postorder;
int post_index;
Map<Integer,Integer> map =new HashMap<Integer, Integer>();
public TreeNode buildTree(int[] inorder,int[] postorder)
{
post_index=postorder.length-1;
for(int i=0;i<inorder.length;i++)
{
map.put(inorder[i],i);
}
this.inorder=inorder;
this.postorder=postorder;
return helper(0,inorder.length-1);
}
public TreeNode helper(int in_left,int in_right)
{
if(in_left>in_right)
return null;
int root_val = postorder[post_index--];
Integer index = map.get(root_val);
TreeNode root = new TreeNode(root_val);
root.right = helper(index+1,in_right);
root.left = helper(in_left,index-1);
return root;
}