已知前序序列和中序序列重建二叉树
一.解决方法:
在相关的书籍中描述了一个递归的解决方法,其算法思想如下:
1.从前序序列中第一个元素开始,取出一个元素,索引后移一位(preIndex+1)
2.根据选择到的数值创建一个树节点newNode
3.然后查找所选的数值在中序序列中的索引,用inIndex存储
4.递归调用此方法为inIndex之前的数组为中序序列构建一颗子树,将其作为newNode的左子树
5.递归调用此方法为inIndex之后的数组为中序序列构建一颗子树,将其作为newNode的右子树
6.返回newNode
下面我们用实际的例子来推理一遍:
前序遍历{3,9,20,15,7}
中序遍历{9,3,15,20,7}
我们有:

二.代码实现
在代码实现的过程中我们要注意的点是:
1.当前序数组和中序数组都为空时,我们应该返回null
2.当中序数组只有一位时,该节点的左右孩子都为null
下面是代码实现,注释详细,内含测试方法:
public class ChongJianErChaShu {
public static void main(String[] args) {
ChongJianErChaShu test=new ChongJianErChaShu();
int[] a={
1,2};
int[] b={
1,2};
TreeNode first=test.b

浙公网安备 33010602011771号