257 Binary Tree Paths

原題鏈接:Binary Tree Paths

一道新題,我想了好久也不會戳葵。就乓。。TnT
以下代碼是在Leetcode官方論壇里看到的譬淳,非常好:

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    # @param {TreeNode} root
    # @return {string[]}
    def binaryTreePaths(self, root):
        if not root:
            return []
        return [str(root.val) + '->' + path
                for kid in (root.left, root.right) if kid
                for path in self.binaryTreePaths(kid)] or [str(root.val)]

代碼非常簡短档址。
講解如下:
首先判斷root是否為空,如果不存在這個root即 為空)邻梆,則返回一個空的list守伸。
然后采用遞歸的方法。第二個return中的兩個for等價于嵌套浦妄,之所以不寫在同一行是為了提高可讀性尼摹。第一個for循環(huán)表示在root的左右子樹中選擇一個,并且不能是空的子樹剂娄;然后蠢涝,第二個for就是在該子樹中利用遞歸方法。
最后的or [str(root.val)]是只有一個根節(jié)點的情況時(傳入的樹只有根節(jié)點時阅懦,或者在遞歸當中會出現(xiàn)這種情況)和二,不需要顯示'->',所以直接返回根節(jié)點的值耳胎。

我們現(xiàn)在來仔細地分析一下這個遞歸為什么是合理的:
第一眼看上去惯吕,最后一塊代碼

return [str(root.val) + '->' + path
    for kid in (root.left, root.right) if kid
    for path in self.binaryTreePaths(kid)] or [str(root.val)]

返回的只是其中一條"root-to-leaf path",并不是所有條"root-to-leaf path"怕午。因為有一個+ path废登,后面的兩個for都是為這個path服務的。
但是我們注意觀察最后的or [str(root.val)]郁惜,由于這道題要返回的是"root-to-leaf path"堡距,所以一定會走到葉節(jié)點才返回,那么葉節(jié)點的特點是什么呢兆蕉?沒有左子樹與右子樹羽戒。所以,在遞歸中一定會執(zhí)行到最后的or [str(root.val)]虎韵。最后的for循環(huán)是for path in XXXX半醉,所以or [str(root.val)]得到的字符串兩邊的(代表list的)框框也不用擔心了。
如果還是不明白劝术,參見以下代碼以及對應的輸出:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末缩多,一起剝皮案震驚了整個濱河市呆奕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌衬吆,老刑警劉巖梁钾,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異逊抡,居然都是意外死亡姆泻,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門冒嫡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拇勃,“玉大人,你說我怎么就攤上這事孝凌》脚兀” “怎么了?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵蟀架,是天一觀的道長瓣赂。 經(jīng)常有香客問我,道長片拍,這世上最難降的妖魔是什么煌集? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮捌省,結(jié)果婚禮上苫纤,老公的妹妹穿的比我還像新娘。我一直安慰自己纲缓,他們只是感情好方面,可當我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著色徘,像睡著了一般。 火紅的嫁衣襯著肌膚如雪操禀。 梳的紋絲不亂的頭發(fā)上褂策,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天,我揣著相機與錄音颓屑,去河邊找鬼斤寂。 笑死,一個胖子當著我的面吹牛揪惦,可吹牛的內(nèi)容都是我干的遍搞。 我是一名探鬼主播,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼器腋,長吁一口氣:“原來是場噩夢啊……” “哼溪猿!你這毒婦竟也來了钩杰?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤诊县,失蹤者是張志新(化名)和其女友劉穎讲弄,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體依痊,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡避除,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了胸嘁。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瓶摆。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖性宏,靈堂內(nèi)的尸體忽然破棺而出群井,到底是詐尸還是另有隱情,我是刑警寧澤衔沼,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布蝌借,位于F島的核電站,受9級特大地震影響指蚁,放射性物質(zhì)發(fā)生泄漏菩佑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一凝化、第九天 我趴在偏房一處隱蔽的房頂上張望稍坯。 院中可真熱鬧,春花似錦搓劫、人聲如沸瞧哟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽勤揩。三九已至,卻和暖如春秘蛔,著一層夾襖步出監(jiān)牢的瞬間陨亡,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工深员, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留负蠕,地道東北人。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓倦畅,卻偏偏與公主長得像遮糖,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子叠赐,可洞房花燭夜當晚...
    茶點故事閱讀 43,465評論 2 348

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