他的回复:
补充 public TreeNode buildTree(int[] preorder, int[] inorder) { return helper(0, 0, inorder.length - 1, preorder, inorder); } public TreeNode helper(int preStart, int inStart, int inEnd, int[] preorder, int[] inorder) { // 边界处理以及递归的终点 if (preStart > preorder.length - 1 || inStart > inEnd) { return null; } TreeNode root = new TreeNode(preorder[preStart]); // 中序的编号 int inIndex = 0; for (int i = inStart; i = inEnd; i++) { if (inorder[i] == root.val) { inIndex = i; } } // 对左边和右边的子树分别处理 root.left = helper(preStart + 1, inStart, inIndex - 1, preorder, inorder); root.right = helper(preStart + inIndex - inStart + 1, inIndex + 1, inEnd, preorder, inorder); return root; }