劍指offer31 重建二叉樹

2021-10-06 03:55:30 字數 1378 閱讀 2974

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

手動重建流程圖:

演算法步驟圖:

:# 返回構造的treenode根節點

defreconstructbinarytree

(self, pre, tin)

:# write code here

ifnot pre or

not tin or

len(pre)

!=len

(tin)

:return

none

# 1.找到root以及其在中序中的位置

root = pre[0]

rootnode = treenode(root)

pos = tin.index(root)

# 2.新建列表,儲存root的左右子樹的前序和中序

tinleft = tin[

:pos]

tinright = tin[pos+1:

] preleft = pre[

1:pos+1]

preright = pre[pos+1:

]# 3. 遞迴;左右子樹分別作為乙個新樹開始找其根結點以及左右子樹

leftnode = self.reconstructbinarytree(preleft, tinleft)

rightnode = self.reconstructbinarytree(preright, tinright)

# 判斷leftnode和rightnode是否為空,若不為空,則建立其和root的關係

if leftnode:

rootnode.left = leftnode

if rightnode:

rootnode.right = rightnode

return rootnode

牛客網該題鏈

4 重建二叉樹(劍指offer)

4.重建二叉樹 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。1 思路 通常樹有如下幾種遍歷方式 前序遍歷 先訪問根結點,再訪問左子結點,最後訪問右子結點。root一般在最前 中...

劍指offer 樹 7 重建二叉樹

使用雜湊表map記錄中序遍歷每個元素的位置 利用性質 1.先序遍歷的第乙個節點是根節點 2.中序遍歷的根節點的左邊是左子樹,右邊是右子樹 假設左子樹的中序遍歷的長度是len,在前序遍歷中,根節點後面len個數,是左子樹的前序遍歷,剩下的數是右子樹的前序遍歷 根據左右子樹的前序遍歷和中序遍歷,我們先遞...

劍指offer4 重建二叉樹

給出前序遍歷和中序遍歷,重新構建二叉樹.重建二叉樹主要就是遞迴,每一次新增乙個結點進入二叉樹,保證遞迴的順序和前序遍歷順序一致就ok了,多以左子樹的遞迴在前面,右子樹的遞迴放在後面,和前序遍歷的順序一致,第一次遞迴新增前序遍歷陣列中的第乙個,第二次遞迴新增的是前序遍歷陣列中的第二個.第n個就是陣列中...