(劍指offer)面試題7 重建二叉樹

2021-09-25 10:06:46 字數 1126 閱讀 7275

這個題主要利用遞迴求解。利用二叉樹前序遍歷和中序遍歷的特性。前序遍歷的第乙個值一定為根節點,對應於中序遍歷中間的乙個點。在中序遍歷序列中,這個點左側的均為根的左子樹,這個點右側的均為根的右子樹。這時可以利用遞迴,分別取前序遍歷[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 在二叉樹的前序遍歷中,第乙個數字總...