题目描述
给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。
说明: 叶子节点是指没有子节点的节点。
算法思路
二叉树天然适合递归。
第一步:结束条件: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%的用户