題目描述
給定一個二叉樹和一個目標和,找到所有從根節點到葉子節點路徑總和等於給定目標和的路徑。
說明: 葉子節點是指沒有子節點的節點。
算法思路
二叉樹天然適合遞歸。
第一步:結束條件: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%的用戶