You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LeetCode 112题Path Sum:代码返回错误结果,求问题排查

问题分析与修复

核心错误点

  1. 主函数未返回递归结果
    你写的hasPathSum函数最后仅调用了build_some(root, 0),但没有返回该函数的执行结果,导致整个方法默认返回None,而LeetCode会将None判定为False——这就是明明列表里存在目标值,程序却返回False的根本原因。

  2. 递归调用的返回值未向上传递
    在build_some中调用左右子树递归时,不管子递归是否找到符合条件的路径,你都没有接收并传递它的返回值。比如左子树递归已经返回True,上层函数仍会继续执行后续逻辑,无法及时终止递归并向上传递有效结果。

  3. 初始条件判断逻辑错误
    if not root or targetSum == 0: return False这行存在问题:若输入树是仅含一个值为0的节点,且targetSum为0时,这行代码会直接返回False,属于误判。

  4. 冗余的列表存储设计
    用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 08:28:26