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

排查二叉树中查找与给定目标值最接近数的递归函数返回错误问题

问题根因
  • 核心是两点:
    1. Python中整数是不可变类型,你将closest作为参数传递给子递归时,传的是值的拷贝,子函数内对closest的修改不会影响上层函数的closest变量
    2. 你调用左右子树的closest_value函数时,没有接收它返回的更新后的closest值,子递归找到的更接近的22没有被传递回上层,最终根节点返回的是根节点层计算得到的初始值8,子递归的结果全部被丢弃了。
      你看到的内部打印是子函数内的局部变量输出,这些值没有向上传递,所以最终返回结果和打印内容不一致。
修复方案

将子递归的返回值赋值给当前层的closest变量即可,同时建议把closest的默认值改为无穷大,避免目标值为负数时初始值0干扰计算:

def closest_value(root, target, closest=float('inf')):
    if abs(root.val - target) < abs(closest - target):
        closest = root.val
        print(closest)
    if root.left is not None:
        # 接收左子树返回的最新最近值
        closest = closest_value(root.left, target, closest)
    if root.right is not None:
        # 接收右子树返回的最新最近值
        closest = closest_value(root.right, target, closest)
    return closest

运行修改后的代码,返回结果就会是预期的22。

内容的提问来源于stack exchange,提问作者lukasz21

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 21:15:04