5 重建二叉樹 python

2021-10-06 07:19:23 字數 1166 閱讀 9189

題目描述:

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。

示例:

前序遍歷 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...