根据二叉树前根中根遍历出来的数组还原二叉树。

前根:ABDGCEFH           后跟:DGBAECHF

Java数据结构:前根+中根还原二叉树

上代码:

    private BinaryNode<T> create(T[] prelist, T[] inlist, int preStart, int inStart, int n)
    {
        if (n<=0)
            return null;       
 

T elem=prelist[preStart];                          //根结点值
        BinaryNode<T> p=new BinaryNode<T>(elem); //创建叶子结点
        int i=0;
        while (i<n && !elem.equals(inlist[inStart+i]))     
//在中根序列中查找根值所在位置
            i++;
        p.left = create(prelist, inlist, preStart+1, inStart, i); //创建左子树
        p.right = create(prelist, inlist, preStart+i+1, inStart+i+1, n-1-i);  
//创建右子树
        return p;
    }

由于前人的思维过于强大,目前智能看懂代码,嘤嘤嘤。等我有时间了再来解释为啥这么做,今天就解释以下过程。

首先从a开始,查询到a的n=8(前根序列的长度),i=2(由代码计算),然后递归左子树,A的左子树为B计算得B.n=A.i=2.B.i=2

此时递归B的左子树,B.Left=D,此时n=2,i=0...出现了0及D.left=null.然后发现进行递归D的右子树。。。。大家顺着思路过一遍就差不多懂了。

相关文章: