輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。
例如,給出
前序遍歷 preorder = [3,9,20,15,7]
中序遍歷 inorder = [9,3,15,20,7]
返回如下的二叉樹:
3限制:/ \9 20
/ \
15 7
0 <= 節點個數 <= 5000
前序遍歷中找出根節點,是可以去中序遍歷中劃分子樹的。
思路:
先利用前序遍歷的第乙個點(也就是根節點),利用根節點去中序遍歷中劃分子樹。然後不斷遞迴處理劃分,直到不能劃分為止。
配合**看看,應該就可以理解了。
**實現:
class
solution
//pl是前序遍歷的開始點,pr是結束點。 il是中序遍歷的開始點,ir是結束點
treenode*
dfs(vector<
int>
& pre,
int pl,
int pr, vector<
int>
& in,
int il,
int ir)
};
劍指offer 第6題重建二叉樹
public class test 6 根據前序遍歷和中序遍歷構建二叉樹 前序遍歷序列 前序遍歷開始位置 前序遍歷結束位置 中序遍歷序列 中序遍歷開始位置 中序遍歷結束位置 構建的樹的根節點 前序遍歷和中序遍歷序列 private static treenode reconstructbinaryt...
劍指Offer第6題(重建二叉樹)
本部落格旨在個人總結回顧 題目描述 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中不含有重複的數字。例如輸入前序遍歷序列為和中序遍歷序列,這重建出如下圖所示的二叉樹並輸出他的頭結點。二叉樹結點的定義如下 struct binarytr...
劍指offer程式設計題《重建二叉樹》
輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。我們都知道,通過前序遍歷和中序遍歷或後序遍歷和中序遍歷可以唯一確定一棵二叉樹。前序 根 左 右 中序 左 根 右 後序 左 右 根 ...