Python二叉树最小值函数

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:

我试图在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:
       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