【问题标题】:Python Binary Tree Min value functionPython二叉树最小值函数
【发布时间】:2017-09-09 09:57:25
【问题描述】:

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

【问题讨论】:

  • 你的节点是如何定义的?
  • 在您的 if 块中只需将 self._MinVal(node.left) 更改为 return self._MinVal(node.left)

标签: python recursion binary-search-tree


【解决方案1】:

更新:要保留递归方法并修复现有代码,只需更改第 3 行,
IE。 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

这个函数应该可以做你需要的,相当顺利。

【讨论】:

  • 我已经使用 while 语句来获取最小值,我想通过递归来实现,所以正在练习。你能告诉我递归的溶胶吗?
  • 没问题!在代码的第 3 行,将 self._MinVal(node.left) 替换为 return self._MinVal(node.left)。在那里添加 return 将使您从递归堆栈底部返回的值冒泡,一直到顶部。
猜你喜欢
  • 2021-12-19
  • 1970-01-01
  • 2012-11-28
  • 2013-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-09
相关资源
最近更新 更多