輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。所以我們可以知道,前序遍歷第乙個是中,也就是頭結點
# 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...