lc112.路径总和

 

题目链接

在做lc124.二叉树中的最大路径和的时候顺手做的,没想到没用多久直接一遍就过了,不过我的实现为什么比较慢啊,看了一下别人的哦原来是我可以直接将hasPathSum这个函数本身作为递归的一部分而不需用重新再在里面定义另外一个函数,所以就慢了4ms左右。这个算法的时间复杂度是O(N),空间复杂度是O(N)。

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def hasPathSum1(self, root: TreeNode, sum: int) -> bool:

        def traversal(node, target):
            if not node:
                return False
            value = node.val
            if value == target and node.left is None and node.right is None:
                return True
            return traversal(node.left, target - value) or traversal(node.right, target - value)

        return traversal(root, sum)

    def hasPathSum2(self, root: TreeNode, sum: int) -> bool:
        if not root:
            return False
        if not root.left and not root.right:
            return root.val == sum
        return self.hasPathSum2(root.left, sum-root.val) or self.hasPathSum2(root.right, sum-root.val)