深度优先算根到叶子结点的值之和,满足条件抛出异常以跳出递归。
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 # 遇到异常,表示找到了