如何解决最近的叶子节点解决方案不返回
class newNode:
def __init__(self,key):
self.key = key
self.left = self.right = None
def minimumDistanceHelper(root,node,closest):
if(root is None):
return
if(root.left is None and root.right is None):
if(abs(closest-node.key)>abs(node.key-root.key)):
closest = root.key
print("closest:",closest)
else:
minimumDistanceHelper(root.left,closest)
minimumDistanceHelper(root.right,closest)
def minimumDistance(root,node):
if(root is None):
return float('inf')
closest = root.key
minimumDistanceHelper(root,closest)
return closest
# Driver Code
if __name__ == '__main__':
# Let us create Binary Tree shown
# in above example
root = newNode(10)
root.left = newNode(12)
root.right = newNode(13)
root.right.left = newNode(14)
root.right.right = newNode(15)
root.right.left.left = newNode(21)
root.right.left.right = newNode(22)
root.right.right.left = newNode(23)
root.right.right.right = newNode(24)
root.right.left.left.left = newNode(1)
root.right.left.left.right = newNode(2)
root.right.left.right.left = newNode(3)
root.right.left.right.right = newNode(4)
root.right.right.left.left = newNode(5)
root.right.right.left.right = newNode(6)
root.right.right.right.left = newNode(7)
root.right.right.right.right = newNode(8)
x = root.right
print("The closest leaf to the node with value",x.key,"is at a distance of",minimumDistance(root,x))
我想将最接近的叶节点打印到二叉树中的特定节点。我在定义的函数中得到正确的答案,但我无法返回该答案。 链接到问题:https://www.geeksforgeeks.org/closest-leaf-to-a-given-node-in-binary-tree/
解决方法
您试图通过引用传递“最近”,但是Python中的参数是通过赋值传递的。 Relevant SO answer,official Python FAQ。
您有(为简洁起见,已将其删除):
def minimumDistanceHelper(root,node,closest):
closest = root.key
print("closest:",closest)
def minimumDistance(root,node):
closest = root.key
minimumDistanceHelper(root,closest)
return closest
当您传递最接近minimumDistanceHelper的对象时,由于closest是一个不可变的整数,所以minimumDistanceHelper内部的最接近的参数所引用的对象与minimumDistance函数内部的最接近的对象不相同。结果,minimumDistance的返回值始终是root.key。
有两种方法可以解决此问题。更好的方法是从minimumDistanceHelper返回最近的值。 minimumDistanceHelper的结尾将变为
closestLeft = minimumDistanceHelper(root.left,node)
closestRight = minimumDistanceHelper(root.right,node)
if abs(closestLeft - node) < abs(closestRight - node):
return closestLeft
else:
return closestRight
另一种方法是将最接近的类型转换为可变类型,例如列表或字典。如果您坚持要这样做,可以将“最接近”声明为
closest = [root.key]
然后使用
在minimumDistanceHelper中写入该信息closest[0] = root.key
但是请注意,这是如何写入最接近的第0个索引,而不是最接近的自身。如果要使用
closest = [root.key]
我们会有同样的问题,而最接近的不是原始版本。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。