Java資料結構:前序和中序還原二叉樹
阿新 • • 發佈:2018-12-16
根據二叉樹前根中根遍歷出來的陣列還原二叉樹。
前根: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的右子樹。。。。大家順著思路過一遍就差不多懂了。