劍指Offer 程式設計題04 重建二叉樹

2021-08-28 13:22:38 字數 1168 閱讀 7575

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

牛客網:鏈結

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

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

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

# 返回構造的treenode根節點

def reconstructbinarytree(self, pre, tin):

# write code here

if not pre:

return none

'''當列表中只剩下乙個值時,一定要注意返回的是pre[0],而不是pre 而且一定要treenode'''

if len(pre) == 1:

return treenode(pre[0])

'''先找到根節點 要定義成treenode樣式'''

root = treenode(pre[0])

'''根據根節點數值定義到中序序列的index'''

index = tin.index(pre[0])

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

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

return root

劍指Offer(04) 重建二叉樹

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。通常樹有如下幾種遍歷方式 前序遍歷 先訪問根節點,再訪問左子節點,最後訪問右子節點。中序遍歷 先訪問左子節點,再訪問根節點,最後訪問...

劍指offer04 重建二叉樹

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。首先要知道二叉樹的三種遍歷方式 先序 中序 後序 先序 根左右 中序 左根右 後序 左右根 如何根據先序和中序 或者中序和後續 重建...

劍指offer04 重建二叉樹

題目 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。思路 設前序遍歷序列為pre,中序遍歷序列為in,則易知 1 root pre 0 2 in 中 root 的位置 索引 將 ...