問題描述:
輸入一棵二叉樹前序遍歷和中序遍歷的結果,請重建該二叉樹。
注意:
樣例:
解決問題的關鍵是如何根據中序遍歷和前序遍歷還原出二叉樹的結構,學習資料結構的時候,這樣類似的題目我們也是做過的。前序遍歷第乙個節點是root節點,之後根據該節點找到在中序遍歷中的位置,那麼該位置左右分別是這個二叉樹的左右子樹。然後依次遍歷這個二叉樹的左右子樹。難點是確定二叉樹的左右子樹範圍。找到根節點root的位置 k 以後,對於中序遍歷而言,右子樹是從 k 後的節點開始到 ir 結束,左子樹是從 il 到k 前面的節點,對於前序遍歷而言,左子樹是從 pl+1 開始的,到(pl+1)+(k-1-il)=pl+k-il 中序遍歷的左子樹長度與前序遍歷左子樹長度(k-1-il)相等可以得到該等式。右子樹就可想而知是pl+k-il+1 到 pr。
為啥前序遍歷的右邊界值是preorder.size()-1,便於下面建立root節點。
class
solution
treenode*
dfs(
int pl,
int pr,
int il,
int ir)
};
二叉樹24 重建二叉樹
題目 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。思路 已知一棵樹的先序遍歷的結果陣列和中序遍歷的結果,要求據此重建一棵二叉樹,即重建所有結點並設定結點之間的指標關係,最後返回...
二叉樹 2255 重建二叉樹
總時間限制 1000ms 記憶體限制 65536kb 描述給定一棵二叉樹的前序遍歷和中序遍歷的結果,求其後序遍歷。輸入輸入可能有多組,以eof結束。每組輸入包含兩個字串,分別為樹的前序遍歷和中序遍歷。每個字串中只包含大寫字母且互不重複。輸出對於每組輸入,用一行來輸出它後序遍歷結果。樣例輸入 dbac...
3 9 重建二叉樹
題目 給定一顆樹的先序遍歷結果和中序遍歷的結果,重建這顆樹。例如 前序 ab d c e f 中序 d bae c f a是根節點。思路 根據前序,可以很快找出根節點a,然後根據中序,可以找出根節點a的左右子樹,然後遞迴求a的左子樹前序b d跟中序d b,a的右子樹前序c e f跟中序e c f即可...