Python二进制树最小值函数

时间:2017-06-28 06:04:32

标签: python recursion binary-search-tree

我正在尝试在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。为什么会这样?

1 个答案:

答案 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

这个功能应该可以做到你需要的,相当顺利。