剑指Offer P62 面试题7:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
public class Solution
{
public TreeNode reConstructBinaryTree(int [] pre,int [] in)
{
if (pre == null || in == null || pre.length == 0 || in.length == 0)
return null;
TreeNode root = new TreeNode(pre[0]);
for (int location = 0; location < in.length; location++)
{
if (pre[0] == in[location])
{
// 左子树
int[] leftPre = new int[location];
int[] leftIn = new int[location];
for (int i = 0; i < location; i++)
{
leftPre[i] = pre[i + 1];
leftIn[i] = in[i];
}
root.left = reConstructBinaryTree(leftPre, leftIn);
// 右子树
int[] rightPre = new int[in.length - 1 - location];
int[] rightIn = new int[in.length - 1 - location];
for (int i = 0; i < in.length - 1 - location; i++)
{
rightPre[i] = pre[location + 1 + i];
rightIn[i] = in[location + 1 + i];
}
root.right = reConstructBinaryTree(rightPre, rightIn);
}
}
return root;
}
}
递归调用的时候一定要写
root.left =
root.right =
如果允许导入相关包的话,就不用建立新数组了
root.left = reConstructBinaryTree(Arrays.copyOfRange(pre, 1, location+1), Arrays.copyOfRange(in, 0, location));
root.right = reConstructBinaryTree(Arrays.copyOfRange(pre, location+1, pre.length), Arrays.copyOfRange(in, location+1, in.length));