迈克尔的回答解释了你处理问题的方式,但他没有解释你目前的尝试有什么问题。据我所知,您的策略是检查每个节点,并在运行时跟踪最低值,使用递归查找所有节点。检查完所有节点后,就知道结果是整个树的最小值。这是一个非常有效的方法,而且它本来会起作用的,只是论点并不像你期望的那样起作用。
Python按值传递参数,而不是引用。当使用“min_t=root.key”为min_t赋值时,它仅在函数内部生效。函数的调用方看不到新值。
您可以使用一些简单的代码对此进行测试:def add_one_to(x):
x = x + 1
print "add_one_to", x
x = 2
add_one_to(x)
print x
当您运行代码时,您可以看到x在函数中是递增的,而不是在顶层。
这也适用于函数调用自身时。每个调用都有自己的一组局部变量,并且分配给函数内部的局部变量不会影响调用它的实例。
注意,有些语言确实允许通过引用传递参数。如果通过引用传递参数,则在函数内分配该参数也将影响调用方。如果Python是其中一种语言,您可以将min_t设为引用参数,并且您的函数将正常工作。
虽然Python不直接支持引用参数,但您也可以将引用参数视为一个值,在调用函数时该值将进入函数,在函数完成时也将返回给调用方。你可以分别做这两件事。要将值传递回调用方,请返回该值。然后,调用者可以将该函数分配给它的本地函数,而您基本上已经通过引用传递了一个参数。
以下是如何将其应用于上述示例的方法:def add_one_to(x):