[英]How to return value from recursive function in python?
I'm working with binary tree in python. 我正在使用python中的二叉树。 I need to create a method which searches the tree and return the best node where a new value can be inserted.
我需要创建一种搜索树并返回可以插入新值的最佳节点的方法。 But i'm have trouble returning a value from this recursive function.
但是我很难从这个递归函数中返回一个值。 I'm a total newbie in python.
我是python的新手。
def return_key(self, val, node):
if(val < node.v):
if(node.l != None):
self.return_key(val, node.l)
else:
print node.v
return node
else:
if(node.r != None):
#print node.v
self.return_key(val, node.r)
else:
print node.v
return node
Printing node.v
prints the node value, but when i print the returned node : 打印
node.v
打印节点值,但是当我打印返回的节点时:
print ((tree.return_key(6, tree.getRoot().v)))
it prints 它打印
None
没有
as result. 结果。
You need to return the result of your recursive call. 您需要返回递归调用的结果。 You are ignoring it here:
您在这里忽略它:
if(node.l != None):
self.return_key(val, node.l)
and 和
if(node.r != None):
self.return_key(val, node.r)
Recursive calls are no different from other function calls, you still need to handle the return value if there is one. 递归调用与其他函数调用没有什么不同,如果有返回值,您仍然需要处理返回值。 Use a
return
statement: 使用
return
语句:
if(node.l != None):
return self.return_key(val, node.l)
# ...
if(node.r != None):
return self.return_key(val, node.r)
Note that since None
is a singleton value, you can and should use is not None
here to test for the absence: 请注意,由于
None
是单例值,因此您可以并且应该在此处使用is not None
来测试是否不存在:
if node.l is not None:
return self.return_key(val, node.l)
# ...
if node.r is not None:
return self.return_key(val, node.r)
I suspect you are passing in the wrong arguments to the call to begin with however; 我怀疑您在开始时给调用传递了错误的参数; if the second argument is to be a node, don't pass in the node value:
如果第二个参数是节点,则不要传入节点值:
print(tree.return_key(6, tree.getRoot())) # drop the .v
Also, if all your node
classes have the same method, you could recurse to that rather than using self.return_value()
; 另外,如果所有
node
类都具有相同的方法,则可以递归到该方法,而不是使用self.return_value()
; on the Tree
just do: 在
Tree
做:
print tree.return_key(6)
where Tree.return_key()
delegates to the root node: 其中
Tree.return_key()
委托给根节点:
def return_key(self, val):
root = tree.getRoot()
if root is not None:
return tree.getRoot().return_key(val)
and Node.return_key()
becomes: 并且
Node.return_key()
变为:
def return_key(self, val):
if val < self.v:
if self.l is not None:
return self.l.return_key(val)
elif val > self.v:
if self.r is not None:
return self.r.return_key(val)
# val == self.v or child node is None
return self
I updated the val
testing logic here too; 我也在这里更新了
val
测试逻辑; if val < self.v
(or val < node.v
in your code) is false, don't assume that val > self.v
is true; 如果
val < self.v
(或代码中的val < node.v
)为假, 则不要认为val > self.v
为真; val
could be equal instead. val
可以等于。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.