劍指offer 8 重建二叉樹

2021-08-27 05:02:24 字數 824 閱讀 3483

# -*- coding:utf-8 -*-

# 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

if len(pre)==0:

return none

root=treenode(pre[0])

pos=tin.index(pre[0])

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

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

return root

以題目中的例子為例:輸入前序遍歷序列和中序遍歷序列

前序遍歷從根節點開始,所以pre[0]就是root,中序遍歷是先遍歷左子樹後遍歷根節點,所以在tin中索引pos[0]的位置,將tin分為左右兩個子樹,再分別進行構造。注意root的left和right的邊界,tin的邊界比較好理解,pre的left邊界要將pre[0]去掉,所以從pre[1]開始,tin中左子樹有index個元素(不含root),在pre中左子樹的範圍就是1:1+index

劍指offer 8 重建二叉樹

題目 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並輸出它的後序遍歷序列。日期 2015 07 20 題目 8.重建二叉樹 結果 ac 部落格 include include incl...

4 重建二叉樹(劍指offer)

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

劍指offer 樹 7 重建二叉樹

使用雜湊表map記錄中序遍歷每個元素的位置 利用性質 1.先序遍歷的第乙個節點是根節點 2.中序遍歷的根節點的左邊是左子樹,右邊是右子樹 假設左子樹的中序遍歷的長度是len,在前序遍歷中,根節點後面len個數,是左子樹的前序遍歷,剩下的數是右子樹的前序遍歷 根據左右子樹的前序遍歷和中序遍歷,我們先遞...