【发布时间】:2021-11-21 08:54:43
【问题描述】:
我有一个非常简单的二叉树
class TreeNode(object):
def __init__(self, x):
self.val = x
self.left = None
self.right = None
root = TreeNode(8)
root.left = TreeNode(5)
root.right = TreeNode(14)
root.left.left = TreeNode(4)
root.left.right = TreeNode(6)
root.left.right.left = TreeNode(8)
root.left.right.right = TreeNode(7)
root.right.right = TreeNode(24)
root.right.right.left = TreeNode(22)
我实现了一个函数来查找树中最接近目标的数字 (19):
def closest_value(root, target, closest=0):
if abs(root.val - target) < abs(closest - target):
closest = root.val
print(closest)
if root.left is not None:
closest_value(root.left, target, closest)
if root.right is not None:
closest_value(root.right, target, closest)
return closest
结果显然应该是 22,但我得到的是 8。令人惊讶的是,当我打印以下所有“最接近”的数字时,该函数似乎工作正常:它打印:8、14、22。但为什么不呢?它返回最近的最近数字:22?
result = closest_value(root, 19)
print('result:', result)
【问题讨论】:
-
root.right.right.left的作业在我看来完全崩溃了 -
@raganjosh 你是什么意思坏了?所有节点都以相同的方式创建
-
因为我从未见过这样的事情。属性上的属性?您认为这将有多大的可扩展性?
-
对于设置虚拟数据,我看不出有什么问题。分配给属性的属性非常好。无论如何,问题是关于递归算法的。
-
您需要从递归调用中捕获返回值,并返回两者中最接近的值。
标签: python binary-tree closest