深度优先算根到叶子结点的值之和,满足条件抛出异常以跳出递归。
class Solution:
    def hasPathSum(self , root: TreeNode, sum: int) -> bool:
        if root == None:
            return False
        # 判断当前节点是否为叶子节点
        def is_leaf(node):
            return not (node.left or node.right)
        self.sum = 0
        def dfs(root, leaf):
            if not root:
                if leaf:                         # 满足递归终止条件,且其父节点为叶子节点,则比较长度
                    if self.sum == sum:
                        raise                    # 如果找到,抛出异常,跳出递归
                return
            self.sum += root.val                 # 进入节点,加上该节点值
            result = dfs(root.left, is_leaf(root))
            result = dfs(root.right, is_leaf(root))
            self.sum -= root.val                 # 离开节点,减去该节点值
        try:
            dfs(root, is_leaf(root))
            return False                         # 函数正常运行完,表示没有找到
        except:
            return True                          # 遇到异常,表示找到了