題目描述:
輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。
示例:
前序遍歷 preorder = [3,9,20,15,7]
中序遍歷 inorder = [9,3,15,20,7]
返回如下的二叉樹:
3/ \
9 20
/ \
15 7
思路:
這道題主要明白幾種遍歷順序:
前序遍歷:根左右
中序遍歷:左根右
後序遍歷:左右根
之後利用遞迴思想就可以了
**:
class
treenode
:def
__init__
(self,x)
: self.val = x
self.left =
none
self.right =
none
defbuildtree
(preorder,inorder):if
len(preorder)==0
orlen
(inorder)==0
:return
none
#前序遍歷中第乙個為根節點
root = treenode(preorder.pop(0)
)#獲取根節點在中序遍歷中的index
pos = inorder.index(root.val)
root.left = buildtree(preorder,inorder[
:pos]
) root.right = buildtree(preorder,inorder[pos+1:
])return root
複雜度分析:
遞迴演算法的時間複雜度=子問題個數*子問題的時間複雜度
子問題時間複雜度為o(n),因為python中的pop(i)時間複雜度為o(n);
子問題個數:與n成正比
所以最後的時間複雜度為o(n * n)
空間複雜度:o(1)
5 重建二叉樹
todo 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如,給出 前序遍歷 preorder 3,9,20,15,7 中序遍歷 inorder 9,3,15,20,7 返回如下的二叉樹 3 9 20 15 7 definition f...
二叉樹24 重建二叉樹
題目 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。思路 已知一棵樹的先序遍歷的結果陣列和中序遍歷的結果,要求據此重建一棵二叉樹,即重建所有結點並設定結點之間的指標關係,最後返回...
二叉樹 2255 重建二叉樹
總時間限制 1000ms 記憶體限制 65536kb 描述給定一棵二叉樹的前序遍歷和中序遍歷的結果,求其後序遍歷。輸入輸入可能有多組,以eof結束。每組輸入包含兩個字串,分別為樹的前序遍歷和中序遍歷。每個字串中只包含大寫字母且互不重複。輸出對於每組輸入,用一行來輸出它後序遍歷結果。樣例輸入 dbac...