class Solution {
Map<Integer,Integer> map;
public TreeNode buildTree(int[] inorder, int[] postorder) {
map = new HashMap();
int n = postorder.length;
for (int i = 0; i < n; i++) {
map.put(inorder[i],i);
}
return buildMyTree(postorder,inorder,0,n-1,0,n-1);
}
private TreeNode buildMyTree(int[] postorder, int[] inorder, int postorder_left, int postorder_right, int inorder_left, int inorder_right) {
if(inorder_left > inorder_right){
return null;
}
TreeNode root = new TreeNode(postorder[postorder_right]);
int inorder_root = map.get(postorder[postorder_right]);
int size_postorder_right = inorder_root - inorder_left;
root.left = buildMyTree(postorder,inorder,postorder_left,postorder_left + size_postorder_right - 1,inorder_left,inorder_root - 1);
root.right = buildMyTree(postorder,inorder,postorder_left + size_postorder_right,postorder_right - 1,inorder_root + 1,inorder_right);
return root;
}
}