1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| class Solution { private int pos;
public TreeNode buildTree(int[] inorder, int[] postorder) { pos = postorder.length - 1; Map<Integer, Integer> map = new HashMap<>(); for (int i = 0; i < inorder.length; i++) { map.put(inorder[i], i); } return helper(map, 0, inorder.length - 1, postorder); }
private TreeNode helper(Map<Integer, Integer> map, int iStart, int iEnd, int[] postorder) { if (iStart > iEnd) return null; TreeNode newNode = new TreeNode(postorder[pos]); int rootIdx = map.get(postorder[pos]); pos -= 1; newNode.right = helper(map, rootIdx + 1, iEnd, postorder); newNode.left = helper(map, iStart, rootIdx - 1, postorder); return newNode; } }
|