我正在尝试在python中使用二叉树并尝试在BST中获取Min值。但我面临一个小问题。
def MinVal(self):
if self.root == None:
return None
else:
return self._MinVal(self.root)
def _MinVal(self, node):
if node.left != None:
self._MinVal(node.left)
else:
res = node.data
print(res)
return res
当我打印res变量时,我得到了我的答案但是在我返回它的下一个语句中,该值显示为None。为什么会这样?
答案 0 :(得分:1)
更新:要保持递归方法并修复现有代码,只需更改第3行, 即。
self._MinVal(node.left)
到return self._MinVal(node.left)
。在那里添加
return
关键字 将确保返回值从底部冒出来 递归堆栈。
def _MinVal(self, node):
if node.left != None:
self._MinVal(node.left)
else:
res = node.data
print(res)
return res
当你print(res)
到达左边的最后一个遍历节点时,这是你的正确答案。但是,当您return res
时,您将值返回到递归堆栈中的上一个函数调用。这意味着您的正确答案将返回到上一个节点的函数调用执行,此时您没有返回值。您没有将找到的值传回堆栈,这就是最顶层实例返回 None 的原因。
试试这个,它应该有效:
#Pass root node to this function
def minValue(node):
current = node
# loop down to find the lefmost leaf
while(current.left is not None):
current = current.left
return current.data
这个功能应该可以做到你需要的,相当顺利。