劍指Offer 重建二叉樹

2021-10-03 21:43:47 字數 996 閱讀 2469

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。

注意:

樣例

給定:

前序遍歷是:[3,

9,20,

15,7]

中序遍歷是:[9,

3,15,

20,7]

返回:[3,

9,20, null, null,15,

7, null, null, null, null]

返回的二叉樹如下所示:

3/ \ 9

20/ \

157

遞迴建立整棵二叉樹:先遞迴建立左右子樹,然後建立根節點,並讓指標指向兩棵子樹。

有了左右子樹的前序遍歷和中序遍歷,我們可以先遞迴建立出左右子樹,然後再建立根節點

時空分析

時間複雜度:我們在初始化時,用 雜湊表(unordered_map) 記錄每個值在中序遍歷中的位置,這樣我們在遞迴到每個節點時,在中序遍歷中查詢根節點位置的操作,只需要o(1)的時間。此時,建立每個節點需要的時間是o(1),所以總時間複雜度是o(n)

空間複雜度:建立雜湊表o(n)

c++ **

/**

* definition for binary tree

* struct treenode

* };

*/class

solution

treenode*

dfs(

int pl,

int pr,

int il,

int ir)

};

劍指offer 重建二叉樹

重建二叉樹2.cpp 定義控制台應用程式的入口點。題目描述 輸入乙個二叉樹的前序遍歷和中序遍歷,輸出這顆二叉樹 思路 前序遍歷的第乙個節點一定是這個二叉樹的根節點,這個節點將二叉樹分為左右子樹兩個部分,然後進行遞迴求解 include stdafx.h include vector using na...

《劍指offer》重建二叉樹

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如,則重建二叉樹並返回。輸入乙個樹的前序和中序,例如輸入前序遍歷序列和中序遍歷序列 根據輸入的前序和中序,重建乙個該二叉樹,並返回該樹的根節點。definition for binary...

劍指offer 重建二叉樹

題目描述 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。definition for binary tree struct treenode class solution if ...