1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| public TreeNode buildTree(int[] preorder, int[] inorder) { if (preorder.length == 0) return null; HashMap<Integer, Integer> map = new HashMap<>(); for (int i=0; i<inorder.length; i++) { map.put(inorder[i], i); } return build(map, preorder, 0, preorder.length-1, inorder, 0, inorder.length-1); }
private TreeNode build(HashMap<Integer, Integer> map, int[] preorder, int preLeft, int preRight, int[] inorder, int inLeft, int inRight) { if (preLeft > preRight) return null; int val = preorder[preLeft]; TreeNode node = new TreeNode(val); if (preLeft == preRight) return node;
int index = map.get(val); int leftSize = index - inLeft; int rightSize = inRight - index; node.left = build(map, preorder, preLeft+1, preLeft+leftSize, inorder, inLeft, inLeft+leftSize-1); node.right = build(map, preorder, preLeft+1+leftSize, preLeft+leftSize+rightSize, inorder, index+1, index+rightSize); return node; }
|