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 32 33 34 35 36 37 38 39 40 41 42 43 44
|
class Solution { private Map<Integer, Integer> indexMap;
public TreeNode buildTree(int[] preorder, int[] inorder) { int N = preorder.length; indexMap = new HashMap<>(); for(int i = 0; i < N; ++i){ indexMap.put(inorder[i], i); } return buildTree(preorder, inorder, 0, N - 1, 0, N - 1); }
public TreeNode buildTree(int[] preorder, int[] inorder, int preorder_left, int preorder_right, int inorder_left, int inorder_right){ if(preorder_left > preorder_right){ return null; } int preorder_root = preorder_left; int inorder_root = indexMap.get(preorder[preorder_root]); TreeNode root = new TreeNode(preorder[preorder_root]); int leftSubTreeSize = inorder_root - inorder_left; root.left = buildTree(preorder, inorder, preorder_left + 1, preorder_left + leftSubTreeSize, inorder_left, inorder_root - 1); root.right = buildTree(preorder, inorder, preorder_left + leftSubTreeSize + 1, preorder_right, inorder_root + 1, inorder_right);
return root; } }
|