问题
输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
分析
(1)先根据前序遍历的第一个节点root找到分界点i
(2)将前序遍历数组和中序遍历数组按照分界点进行划分
(3)递归
代码实现
public TreeNode buildTree(int[] preorder, int[] inorder) {
if(preorder.length == 0)
return null;
int tmp = preorder[0];
TreeNode root = new TreeNode(tmp);
int i = 0;
for(;i<inorder.length;i++){
if(inorder[i] == tmp)
break;
}
int []leftD = new int[i];
int []leftL = new int[i];
int []rightD = new int[inorder.length-1-i];
int []rightL = new int[inorder.length-1-i];
for(int j=0;j<i;j++){
leftL[j] = inorder[j];
leftD[j] = preorder[j+1];
}
for(int j=i+1;j<inorder.length;j++){
rightD[j-i-1] = preorder[j];
rightL[j-i-1] = inorder[j];
}
root.left = buildTree(leftD,leftL);
root.right = buildTree(rightD,rightL);
return root;
}