每日演算法題 《重建二叉樹》

2021-09-13 08:59:41 字數 1043 閱讀 1438

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

所以我們可以知道,前序遍歷第乙個是中,也就是頭結點

# class treenode:

# def __init__(self, x):

# self.val = x

# self.left = none

# self.right = none

class solution:

# 返回構造的treenode根節點

def reconstructbinarytree(self, pre, tin):

# write code here

lon = len(pre)

if lon == 0:

return none

elif lon == 1:

return treenode(pre[0])

else:

root = treenode(pre[0])

#這一步看似稍微寫的有點複雜,但其實只是省了一些中間變數,pre[0]是讀取的根節點,tin.index將根節點定位,那麼根節點的左子樹從1開始,到tin.index+1結束,建議自己在紙上將這部分框出來,就好理解的多了。

root.left = self.reconstructbinarytree(pre[1:tin.index(pre[0])+1],tin[:tin.index(pre[0])])

root.right = self.reconstructbinarytree(pre[tin.index(pre[0])+1:],tin[tin.index(pre[0])+1:])

return root

#不要忘記return

每日演算法 重建二叉樹

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。核心思路 二叉樹的前序遍歷順序是 根節點 左子樹 右子樹,每個子樹的遍歷順序同樣滿足前序遍歷順序。二叉樹的中序遍歷順序是 左子樹 根...

每日一題 重建二叉樹

題目 輸入某二叉樹的先序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的先序遍歷和中序遍歷的結果中都不含重複的數字。例如 前序遍歷序列 1,2,4,7,3,5,6,8 和中序遍歷序列 4,7,2,1,5,3,8,6 重建出下圖所示的二叉樹並輸出它的頭結點。param preorder 先序遍歷 p...

重建二叉樹 程式設計題

題目 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹,假設輸入的前序遍歷和中序遍歷的結果中都不含有重複值。前序遍歷 中序遍歷 主要思路 1.前序遍歷的第乙個元素是根節點,將根初始化。2.在中序遍歷中找到根的位置,根的左邊是左子樹,右邊是右子樹。3.然後左右遞迴。btnode reconstr...