[LeetCode]113. Path Sum II

113. Path Sum II

这里需要注意的是,不要直接递归而不判断是否存在子结点,那么样做的后果就是左结点的遍历和右结点的遍历生成相同的结果,导致最后的结果中都存在重复路径。

DFS

class Solution(object):
    def pathSum(self, root, sum):
        """
        :type root: TreeNode
        :type sum: int
        :rtype: List[List[int]]
        """
        def dfs(node, cursum, path):
            if not node.left and not node.right:
                if cursum == sum:
                    res.append(path)
                return
            if node.left:
                dfs(node.left, cursum + node.left.val, path + [node.left.val])
            if node.right:
                dfs(node.right, cursum + node.right.val, path + [node.right.val])
        if not root:
            return []
        res = []
        dfs(root, root.val, [root.val])
        return res

上面是自底向上,下面是自顶向下。

class Solution(object):
    def pathSum(self, root, sum):
        """
        :type root: TreeNode
        :type sum: int
        :rtype: List[List[int]]
        """
        def dfs(node, cursum, path):
            if not node.left and not node.right:
                if cursum == node.val:
                    path.append(node.val)
                    res.append(path)
                return
            if node.left:
                dfs(node.left, cursum-node.val, path + [node.val])
            if node.right:
                dfs(node.right, cursum-node.val, path + [node.val])
        if not root:
            return []
        res = []
        dfs(root, sum, [])
        return res
posted @ 2017-08-30 14:33  banananana  阅读(117)  评论(0编辑  收藏  举报