1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| class Solution { Map<Integer, Integer> map = new HashMap<>(); public TreeNode buildTree(int[] preorder, int[] inorder) { if (preorder.length == 0) return null; for(int i = 0; i < inorder.length; i++){ map.put(inorder[i], i); } return buildHelper(preorder, 0, preorder.length, inorder, 0, inorder.length); }
private TreeNode buildHelper(int[] preorder, int preS, int preE, int[] inorder, int inS, int inE){ if (preS >= preE || inS >= inE) return null;
int rootVal = preorder[preS]; int rootIndex = map.get(rootVal); int lenOfLeft = rootIndex - inS; TreeNode root = new TreeNode(rootVal);
root.left = buildHelper(preorder, preS + 1, preS + 1 + lenOfLeft, inorder, inS, rootIndex); root.right = buildHelper(preorder, preS + 1 + lenOfLeft, preE, inorder, rootIndex + 1, inE);
return root;
} }
|