劍指Offer(四) 重建二叉樹

2022-08-24 17:24:11 字數 1038 閱讀 1220

刷題平台:牛客網

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

通常樹有如下幾種遍歷方式:

本題為前序遍歷和中序遍歷,最少需要兩種遍歷方式,才能重建二叉樹。

前序遍歷序列中,第乙個數字總是樹的根結點的值。在中序遍歷序列中,根結點的值在序列的中間,左子樹的結點的值位於根結點的值的左邊,而右子樹的結點的值位於根結點的值的右邊。剩下的我們可以遞迴來實現,具體如圖:

#返回構造的treenode根節點

defreconstructbinarytree(self, pre, tin):

#write code here

if len(pre) ==0:

return

none

elif len(pre) == 1:

return

treenode(pre[0])

else

: root =treenode(pre[0])

pos =tin.index(pre[0])

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

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

return root

劍指offer(四) 重建二叉樹

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。我們先來弄懂前序遍歷和中序遍歷的特點 前序遍歷 根結點 左子樹 右子樹。中序遍歷 左子樹 根結點 右子樹。所以前序遍歷序列的第乙個值...

劍指Offer 四 重建二叉樹

解法1 前序遍歷的第乙個數為樹的根,而中序遍歷中根所在位置的左面的序列即為左子樹的中序遍歷,右面即為右子樹的中序遍歷,遞迴找到每個子樹的根就ok了!class solution 返回構造的treenode根節點 def reconstructbinarytree self,pre,tin write...

劍指Offer 四 重建二叉樹

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。coding utf 8 class treenode def init self,x self.val x self.left n...