【力扣日记】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%的用户

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