Loading

已知前序序列和中序序列重建二叉树

一.解决方法:
在相关的书籍中描述了一个递归的解决方法,其算法思想如下:

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
posted @ 2020-09-08 19:46  文牧之  阅读(31)  评论(0)    收藏  举报  来源