輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序描述遍歷序列,則重建二叉樹並返回。
手動重建流程圖:
演算法步驟圖:
:# 返回構造的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個就是陣列中...