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 28 29 30 31
| class Solution { private Map<Integer, Integer> indexMap; private int[] preorder; public TreeNode buildTree(int[] preorder, int[] inorder) { if(preorder.length == 0 || inorder.length == 0) { return null; } int len = preorder.length; indexMap = new HashMap<>(len); this.preorder = preorder; for(int i = 0; i < len; i ++) { indexMap.put(inorder[i], i); } return build(0, preorder.length - 1, 0, inorder.length - 1); }
private TreeNode build(int preL, int preR, int inL, int inR) { if(preL > preR || inL > inR) { return null; } int rootVal = preorder[preL]; TreeNode root = new TreeNode(rootVal); int index = indexMap.get(rootVal);
int leftSize = index - inL; root.left = build(preL + 1, preL + leftSize, inL, index - 1); root.right = build(preL + leftSize + 1, preR, index + 1, inR); return root; } }
|