/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public TreeNode buildTree(int[] preorder, int[] inorder) { return helper(preorder, inorder, 0, preorder.length - 1, 0, inorder.length - 1); } private TreeNode helper(int[] preorder, int[] inorder, int pLeft, int pRight, int iLeft, int iRight) { if (pLeft > pRight || iLeft > iRight) { return null; } TreeNode current = new TreeNode(preorder[pLeft]); int i; for (i = iLeft; i <= iRight; i++) { if (preorder[pLeft] == inorder[i]) { break; } } current.left = helper(preorder, inorder, pLeft + 1, pLeft + i - iLeft, iLeft, i - 1); current.right = helper(preorder, inorder, pLeft + i - iLeft + 1, pRight, i + 1, iRight); // Attn: don't forget take pLeft, iLeft when calculating new p, below is incorrect // current.left = helper(preorder, inorder, pLeft + 1, i, iLeft, i - 1); // current.right = helper(preorder, inorder, i + 1, pRight, i + 1, iRight); return current; } }

浙公网安备 33010602011771号