輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。
注意:
樣例
給定:
前序遍歷是:[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 ...