1. 程式人生 > >Java資料結構:前序和中序還原二叉樹

Java資料結構:前序和中序還原二叉樹

根據二叉樹前根中根遍歷出來的陣列還原二叉樹。

前根:ABDGCEFH           中跟:DGBAECHF

上程式碼:

    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的右子樹。。。。大家順著思路過一遍就差不多懂了。