【力扣日記】113 路徑總和 II | 遞歸·強化

題目描述

給定一個二叉樹和一個目標和,找到所有從根節點到葉子節點路徑總和等於給定目標和的路徑。

說明: 葉子節點是指沒有子節點的節點。

算法思路

二叉樹天然適合遞歸。

第一步:結束條件:if not root:return

第二步:縮小規模:root.left 與root.right替代root遞歸。

第三步:返回值:這次的遞歸參考【樹遍歷】的遞歸方式,不需要返回值,而是在遞歸的過程中修改外界的列表。
————
這是模板:返回值是嵌套列表。

class Solution:
    def pathSum(self, root, sum: int) :

遍歷的過程中我們需要把當前節點值保存到一個容器裏,以遍得到滿足條件的節點時保存當前路徑。

        def Sum(root,sum,tmp=[]):
            if not root:return
            #本來嘗試過把對tem和sum的修改放到Sum()函數裏,
            #但是因爲存在節點爲空,所以做不到。
            tmp+=[root.val]
            sum-=root.val
            #當sum==0時,我們要判斷當前節點是否是葉節點,
            #是,則保存路徑,不是則繼續遞歸。
            if sum==0 :
                if not(root.left or root.right):
                    res.append(tmp[:])
            Sum(root.left,sum,tmp)
            Sum(root.right,sum,tmp)
            #每一層開始迴歸前都要將這一層造成的影響復原。
            sum+=root.val
            tmp.pop()
        res=[]
        Sum(root,sum)
        return res

執行用時 :44 ms, 在所有 Python3 提交中擊敗了92.66%的用戶
內存消耗 :15.2 MB, 在所有 Python3 提交中擊敗了64.22%的用戶

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章