105. Construct Binary Tree from Preorder and Inorder Traversal 发表于 2021-11-20 123456789101112131415161718192021222324252627class Solution { public TreeNode buildTree(int[] preorder, int[] inorder) { // preorder: root, left, right // inorder: left, root, right Map<Integer, Integer> inOrderValueToIndexMap = new HashMap<>(); for (int i = 0; i < inorder.length; i++) { inOrderValueToIndexMap.put(inorder[i], i); } return buildTree(preorder, 0, preorder.length - 1, inorder, 0, inorder.length - 1, inOrderValueToIndexMap); } private TreeNode buildTree(int[] preorder, int preStartIndex, int preEndIndex, int[] inorder, int inStartIndex, int inEndIndex, Map<Integer, Integer> inOrderValueToIndexMap) { if (preStartIndex > preEndIndex) { return null; } TreeNode root = new TreeNode(preorder[preStartIndex]); int inRootIndex = inOrderValueToIndexMap.get(root.val); int leftTreeNodeCount = inRootIndex - inStartIndex; root.left = buildTree(preorder, preStartIndex + 1, preStartIndex + 1 + leftTreeNodeCount - 1, inorder, inStartIndex, inRootIndex - 1, inOrderValueToIndexMap); root.right = buildTree(preorder, preStartIndex + 1 + leftTreeNodeCount - 1 + 1, preEndIndex, inorder, inRootIndex + 1, inEndIndex, inOrderValueToIndexMap); return root; }} Reference105. Construct Binary Tree from Preorder and Inorder Traversal剑指 Offer 07. 重建二叉树