How to return value from recursive function in python?
我正在使用Python中的二进制树。我需要创建一个方法来搜索树并返回可以插入新值的最佳节点。但是我很难从这个递归函数返回一个值。我是Python的新手。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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 |
打印
1 | print ((tree.return_key(6, tree.getRoot().v))) |
资讯科技印刷
None
结果。
您需要返回递归调用的结果。您在这里忽略了它:
1 2 | if(node.l != None): self.return_key(val, node.l) |
和
1 2 | if(node.r != None): self.return_key(val, node.r) |
递归调用与其他函数调用没有区别,如果有返回值,您仍然需要处理它。使用
1 2 3 4 5 6 7 | if(node.l != None): return self.return_key(val, node.l) # ... if(node.r != None): return self.return_key(val, node.r) |
请注意,由于
1 2 3 4 5 6 7 | 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) |
不过,我怀疑您向要开始的调用传递了错误的参数;如果第二个参数是节点,则不要传递节点值:
1 | print(tree.return_key(6, tree.getRoot())) # drop the .v |
另外,如果您所有的
1 | print tree.return_key(6) |
其中
1 2 3 4 | def return_key(self, val): root = tree.getRoot() if root is not None: return tree.getRoot().return_key(val) |
1 2 3 4 5 6 7 8 9 10 | 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 |
我在这里也更新了