Python二叉树最小值函数
我试图在python中处理二叉树,并试图在BST中获取最小值。但我面临一个小问题Python二叉树最小值函数,python,recursion,binary-search-tree,Python,Recursion,Binary Search Tree,我试图在python中处理二叉树,并试图在BST中获取最小值。但我面临一个小问题 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:
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。为什么会这样
更新:要保持递归方法并修复现有代码,只需更改第3行,
即self.\u MinValnode.left返回self.\u MinValnode.left
在那里添加return关键字
将确保返回值将从
递归堆栈
当您打印Res时,您会看到左侧最后一个遍历的节点,这是您的正确答案。但是,当您返回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
这个函数应该可以很顺利地完成您需要的任务。节点如何定义?在if块中,只需更改self即可。_MinValnode.left返回self。_MinValnode.left我已经使用while语句来获取最小值,我想手动递归,所以我一直在练习。你能告诉我递归的sol吗?当然可以!在代码的第3行,将self.\u MinValnode.left替换为return self.\u MinValnode.left。在那里添加return将使您从递归堆栈的底部返回的值冒泡,从右到上。
#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