重建二叉樹

題目描述

輸入某二叉樹的前序遍歷和中序遍歷的結(jié)果,請重建出該二叉樹灿渴。假設(shè)輸入的前序遍歷和中序遍歷的結(jié)果中都不含重復(fù)的數(shù)字。例如輸入前序遍歷序列{1,2,4,7,3,5,6,8}和中序遍歷序列{4,7,2,1,5,3,8,6},則重建二叉樹并返回柜某。

以中序和前后序建成樹的思想已經(jīng)不用再闡述了靠娱,簡歷樹主要靠的是遞歸

代碼展示

class TreeNode:
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None

class Solution:
    def reConstructBinaryTree(self, pre, tin):
        if not pre or not tin: #判斷是否為None
            return None
        root = TreeNode(pre.pop(0))
        #root為前序的頭
        index = tin.index(root.val)
        #index為root的當(dāng)前值在tin中的位置
        root.left = self.reConstructBinaryTree(pre, tin[:index])
        #tin[:index]意思是從0開始輸出index個個數(shù)中序的值,左邊的全是跟的左子樹
        root.right = self.reConstructBinaryTree(pre, tin[index+1:])
        #tin[index + 1:]意思是從第index+2后所有元素,全是跟的右子樹部分
        return root
1沧烈、為什么倒數(shù)第二行是tin[index+1:]

答:因為是右子樹部分,若是tin[index:]則包含了root本身

2像云、為什么pre沒有變化锌雀,上下的都是pre

答:因為pop掉了前序的第一個,也就是樹整體的根迅诬,且是處理完了左子樹腋逆,才會處理右子樹,按照前序序列左子樹一個個pop掉侈贷,當(dāng)先處理左子樹的時候pre[:index-1]就是pre惩歉,所以,上面的pre非下面的pre俏蛮。

3撑蚌、為什么是 if not pre or not tin 而不是 if pre == None or tin == None

答:網(wǎng)上有這樣的答案

代碼中經(jīng)常有三中方式判斷變量是否為None,主要有三種寫法:
(1) if x is None:
(2) if not x:
(3) if not x is None:(這句這樣理解更清晰if not (x is None)

>>> x = 1
>>> not x
False
>>> x = [1]
>>> not x
False
>>> x = 0
>>> not x
True
>>> x = [0]     # You don't want to fall in this one.
>>> not x
False

在python中 None, False, 空字符串"", 0, 空列表[], 空字典{}, 空元組()都相當(dāng)于False 搏屑,因此在使用列表的時候争涌,如果你想?yún)^(qū)分x==[]和x==None兩種情況的話, 此時if not x:將會出現(xiàn)問題:

>>> x = []
>>> y = None
>>> 
>>> x is None
False
>>> y is None
True
>>> 
>>> 
>>> not x
True
>>> not y
True
>>> 
>>> 
>>> not x is None
True
>>> not y is None
False

也許你是想判斷x是否為None,但是卻把x==[]的情況也判斷進(jìn)來了辣恋,此種情況下將無法區(qū)分亮垫。
對于習(xí)慣于使用if not x這種寫法的pythoner,必須清楚x等于None, False, 空字符串"", 0, 空列表[], 空字典{}, 空元組()時對你的判斷沒有影響才行伟骨。
而對于if x is not Noneif not x is None寫法饮潦,很明顯前者更清晰,而后者有可能使讀者誤解為if (not x) is None底靠,因此推薦前者害晦,同時這也是谷歌推薦的風(fēng)格

結(jié)論:
if x is not None是最好的寫法,清晰暑中,不會出現(xiàn)錯誤壹瘟,以后堅持使用這種寫法。
使用if not x這種寫法的前提是:必須清楚x等于None, False, 空字符串"", 0, 空列表[], 空字典{}, 空元組()時對你的判斷沒有影響才行鳄逾。

另一個python解法

class Solution:
    # 返回構(gòu)造的TreeNode根節(jié)點
    def reConstructBinaryTree(self, pre, tin):
        # write code here
        if len(pre) == 0:
            return None
        elif len(pre) == 1:
            return TreeNode(pre[0])
        else:
            ans = TreeNode(pre[0])
            ans.left = self.reConstructBinaryTree(pre[1:tin.index(pre[0])+1],   tin[:tin.index(pre[0])])
            ans.right = self.reConstructBinaryTree(pre[tin.index(pre[0])+1:], tin[tin.index(pre[0])+1:])
            return ans
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末稻轨,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子雕凹,更是在濱河造成了極大的恐慌殴俱,老刑警劉巖政冻,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異线欲,居然都是意外死亡明场,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進(jìn)店門李丰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來苦锨,“玉大人,你說我怎么就攤上這事趴泌≈凼妫” “怎么了?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵嗜憔,是天一觀的道長秃励。 經(jīng)常有香客問我,道長吉捶,這世上最難降的妖魔是什么夺鲜? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮帚稠,結(jié)果婚禮上谣旁,老公的妹妹穿的比我還像新娘。我一直安慰自己滋早,他們只是感情好榄审,可當(dāng)我...
    茶點故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著杆麸,像睡著了一般搁进。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上昔头,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天饼问,我揣著相機(jī)與錄音,去河邊找鬼揭斧。 笑死莱革,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的讹开。 我是一名探鬼主播盅视,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼旦万!你這毒婦竟也來了闹击?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤成艘,失蹤者是張志新(化名)和其女友劉穎赏半,沒想到半個月后贺归,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡断箫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年拂酣,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瑰枫。...
    茶點故事閱讀 40,001評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡踱葛,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出光坝,到底是詐尸還是另有隱情,我是刑警寧澤甥材,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布盯另,位于F島的核電站,受9級特大地震影響洲赵,放射性物質(zhì)發(fā)生泄漏鸳惯。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一叠萍、第九天 我趴在偏房一處隱蔽的房頂上張望芝发。 院中可真熱鬧,春花似錦苛谷、人聲如沸辅鲸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽独悴。三九已至,卻和暖如春锣尉,著一層夾襖步出監(jiān)牢的瞬間刻炒,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工自沧, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留坟奥,地道東北人。 一個月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓拇厢,卻偏偏與公主長得像爱谁,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子旺嬉,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,955評論 2 355

推薦閱讀更多精彩內(nèi)容