LeetCode 112题Path Sum:代码返回错误结果,求问题排查
问题分析与修复
核心错误点
主函数未返回递归结果
你写的hasPathSum函数最后仅调用了build_some(root, 0),但没有返回该函数的执行结果,导致整个方法默认返回None,而LeetCode会将None判定为False——这就是明明列表里存在目标值,程序却返回False的根本原因。递归调用的返回值未向上传递
在build_some中调用左右子树递归时,不管子递归是否找到符合条件的路径,你都没有接收并传递它的返回值。比如左子树递归已经返回True,上层函数仍会继续执行后续逻辑,无法及时终止递归并向上传递有效结果。初始条件判断逻辑错误
if not root or targetSum == 0: return False这行存在问题:若输入树是仅含一个值为0的节点,且targetSum为0时,这行代码会直接返回False,属于误判。冗余的列表存储设计
用my_list存储所有路径和完全没必要,DFS过程中只要找到符合条件的路径,就可以直接返回True,无需遍历完所有路径,这样能大幅提升效率。
修正后的代码
# Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right=None): # self.val = val # self.left = left # self.right = right class Solution: def hasPathSum(self, root: Optional[TreeNode], targetSum: int) -> bool: def dfs(node, current_sum): # 空节点直接返回False if not node: return False # 累加当前节点值 current_sum += node.val # 到达叶子节点,直接判断路径和是否匹配目标值 if not node.left and not node.right: return current_sum == targetSum # 递归左右子树,只要任一子树找到有效路径就向上传递True return dfs(node.left, current_sum) or dfs(node.right, current_sum) # 主函数直接返回递归结果 return dfs(root, 0)
代码说明
- 移除了冗余的
my_list,递归到叶子节点时直接判断路径和,符合条件立即返回True - 用
or连接左右子树的递归结果,只要其中一个子树找到有效路径,就会提前终止递归并向上传递True - 修正了初始条件,仅判断空节点情况,避免
targetSum为0时的误判 - 主函数直接返回递归函数的执行结果,确保正确返回布尔值
内容的提问来源于stack exchange,提问作者badavadapav
相关产品推荐
相关产品推荐

