輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。
這個題的思路就是通過前序遍歷和中序遍歷找到左子樹和右子樹的前序遍歷和中序遍歷然後分別遞迴,一直遞迴到最後乙個節點,建立乙個新節點,然後返回創造其他節點。
我原來寫的演算法是怎麼確定遍歷的起始位置和終止位置的呢,是靠陣列複製,直接複製進去,其實不用,直接每次都傳同乙個陣列,還要加上陣列的起始位置和結束位置就夠了。
1,2,4,7,3,5,6,8
4,7,2,1,5,3,8,6
首先根據前序遍歷知道頭結點的值為1,然後再根據1知道左子樹的中序遍歷是4,7,2 右子樹的中序遍歷是5386
然後左子樹的前序遍歷是247,這怎麼知道呢,其實就是根據左子樹中序遍歷的長度可以知道左子樹前序遍歷的長度。
class
solution
public treenode build
(int
preorder,
int lo1,
int hi1,
int[
] inorder,
int lo2,
int hi2)
}int leftsize=index-lo2;
treenode root=
newtreenode
(preorder[lo1]);
root.left=
build
(preorder,lo1+
1,lo1+leftsize,inorder,lo2,index-1)
; root.right=
build
(preorder,lo1+leftsize+
1,hi1,inorder,index+
1,hi2)
;return root;
}}
樹1 重建二叉樹
輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。definition for binary tree public class treenode public class solu...
1 重建二叉樹
主要思路 1 先判斷那些不滿足的條件以及只有乙個結點的情況 2 根節點 是前序遍歷的第乙個值 3 在中序遍歷中找到根節點的位置,記為pos root of in 以中序遍歷中根節點的位置為參考,切丁左右子樹的範圍 4 然後分為左子樹 右子樹,將左子樹入棧 容器,右子樹入棧或者容器 vectorpre...
二叉樹24 重建二叉樹
題目 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。思路 已知一棵樹的先序遍歷的結果陣列和中序遍歷的結果,要求據此重建一棵二叉樹,即重建所有結點並設定結點之間的指標關係,最後返回...