# -*- 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個數,是左子樹的前序遍歷,剩下的數是右子樹的前序遍歷 根據左右子樹的前序遍歷和中序遍歷,我們先遞...