113. 路径总和 II

https://leetcode-cn.com/problems/path-sum-ii/

解法一:dfs回溯

112题相比,dfs过程中加一个tmp记录当前路径即可,满足条件就将这条路径写入结果集。

class Solution:
    def pathSum(self, root: TreeNode, sum: int) -> List[List[int]]:
        self.res = []   #结果集
        tmpList = []    #记录路径
        self.dfs(root, tmpList, sum)
        return self.res
    
    def dfs(self, root, tmpList, sum):
        if not root:
            return
        tmpList.append(root.val)    #尝试将root的值加入路径
        #符合条件写入
        if not root.left and not root.right and root.val == sum:
            self.res.append(list(tmpList))
        self.dfs(root.left, tmpList, sum-root.val)
        self.dfs(root.right, tmpList, sum-root.val)
        tmpList.pop()    #恢复现场

也可以简化回溯代码,但是速度不如上面快,估计list拼接增加了时间开销

class Solution:
    def pathSum(self, root: TreeNode, sum: int) -> List[List[int]]:
        self.res = []   #结果集
        tmpList = []
        self.dfs(root, tmpList, sum)
        return self.res
    
    def dfs(self, root, tmpList, sum):
        if not root:
            return
        if not root.left and not root.right and root.val == sum:
            self.res.append((tmpList+[root.val]))    #这里可以不新建list,因为拼接操作创建了一个新 list
        self.dfs(root.left, tmpList+[root.val], sum-root.val)
        self.dfs(root.right, tmpList+[root.val], sum-root.val)

最后更新于