這個題主要利用遞迴求解。利用二叉樹前序遍歷和中序遍歷的特性。前序遍歷的第乙個值一定為根節點,對應於中序遍歷中間的乙個點。在中序遍歷序列中,這個點左側的均為根的左子樹,這個點右側的均為根的右子樹。這時可以利用遞迴,分別取前序遍歷[1:i+1]和中序遍歷的[:i]對應與左子樹繼續上乙個過程,取前序遍歷[i+1:]和中序遍歷[i+1]對應於右子樹繼續上乙個過程,最終得以重建二叉樹。
"""
輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。
假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。
例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。
"""class treenode:
def __init__(self,x):
self.val =x
self.left = none
self.right = none
class solution:
def reconstructbinarytree(self,pre,tin):
""":param pre: 前序列表
:param tin: 中序列表
:return:頭節點
"""if not pre and not tin:
return none
root = treenode(pre[0])
if set(pre) != set(tin):
return none
i = tin.index(pre[0]) #找到中序遍歷中根節點的位置
root.left = self.reconstructbinarytree(pre[1:i+1],tin[:i]) #遞迴得到左子樹
root.right = self.reconstructbinarytree(pre[i+1:],tin[i+1:])
return root
pre=[1,2,4,7,3,5,6,8]
tin = [4,7,2,1,5,3,8,6]
test = solution()
newtree = test.reconstructbinarytree(pre,tin)
print(newtree.val)
劍指offer面試題7 重建二叉樹
輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。class solution struct treenode reconstruct int l1,int r1,int l2 pr...
劍指Offer 面試題7 重建二叉樹
題目 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹,假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如,輸入前序遍歷序列和中序遍歷,則重建如圖2.6所示的二叉樹並輸出它的頭節點。分析 前序遍歷 先根,再左,後右 中序遍歷 先左,再根,後右。那麼前序遍歷的第乙個是根,在中序遍歷中找到...
劍指offer 面試題7 重建二叉樹
輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建出二叉樹並輸出他的根節點。二叉樹的定義如下 public static class binarytreenode 在二叉樹的前序遍歷中,第乙個數字總...