排查二叉树中查找与给定目标值最接近数的递归函数返回错误问题
问题根因
- 核心是两点:
- Python中整数是不可变类型,你将
closest作为参数传递给子递归时,传的是值的拷贝,子函数内对closest的修改不会影响上层函数的closest变量 - 你调用左右子树的
closest_value函数时,没有接收它返回的更新后的closest值,子递归找到的更接近的22没有被传递回上层,最终根节点返回的是根节点层计算得到的初始值8,子递归的结果全部被丢弃了。
你看到的内部打印是子函数内的局部变量输出,这些值没有向上传递,所以最终返回结果和打印内容不一致。
- Python中整数是不可变类型,你将
修复方案
将子递归的返回值赋值给当前层的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
相关产品推荐
相关产品推荐

