Given inorder and postorder traversal of a tree, construct the binary tree.
Note:
You may assume that duplicates do not exist in the tree.
第二次刷 做出来了 感觉自己写的比答案简洁
private Map<Integer, Integer> map;
public TreeNode buildTree(int[] inorder, int[] postorder) {
map = new HashMap<>();
for (int i=0; i<inorder.length; i++) {
map.put(inorder[i], i);
}
return build(0, inorder.length-1, postorder, 0, postorder.length-1);
}
private TreeNode build(int is, int ie, int[] postorder, int ps, int pe) {
if (ie<is || pe<ps) return null;
int val = postorder[pe];
TreeNode root = new TreeNode(postorder[pe]);
int index = map.get(val);
root.left = build(is, index-1, postorder, ps, ps+index-1-is);
root.right = build(index+1, ie, postorder, ps+index-is, pe-1);
return root;
}