【问题标题】:Finding minimum of binary tree recursively递归查找二叉树的最小值
【发布时间】:2020-03-17 07:44:48
【问题描述】:

我试图递归地找到二叉树中的最小值(不是二叉搜索树)。让我困惑的是基本情况。如果 TreeNode t 为空,返回什么?由于我将使用返回的值将其与当前的最小值(我认为)进行比较,我相信我返回的内容很重要。

public static Object min(TreeNode t)
{  

  if(t == null)
     return ;
  else
     instantiate an object named mini
     compare it to min(t.getLeft())
        if mini is greater than it, mini equals t.getLeft()
     compare mini to t.getRight())
        if mini is greater, mini equals t.getRight
     return mini

}

【问题讨论】:

  • 我对 Java 中的 TreeNode 一无所知,但如果一个对象为空,我只会返回 -1 或可能为 0。
  • 如上所述,+infinity 是正确的。但我不确定这是您要问的正确问题,因为可能正确的方法不是递归到空节点。也许您可以显示其余的代码? (也比返回类型是Object有点奇怪)。
  • 这不起作用,因为 0 可能大于当前最小值

标签: java algorithm recursion


【解决方案1】:

您目前将Object 作为min 的返回类型,但您可能需要更具体的内容。例如,如果树包含整数,则返回类型将为 IntegerLong。只要min 返回的该类型有一些合理的最大值,这就是您在基本情况下应该返回的值。因此,例如,如果您的树包含整数,则返回 Integer.MAX_VALUE。为什么?因为您可以保证其他所有情况都会小于此值,因此基本情况不会对结果产生不利影响。

【讨论】:

  • 是否有 String.MAX_VALUE ?
  • @Andrew 字符串的最大值是多少?这有什么意义?
【解决方案2】:

如果这是 C 或 C++,你可以只使用指针。 Java 没有它。但是,您可以模拟类似的东西。
或者您可以定义一个包含数据和布尔值的对象。

class A { 
    int a; // or whatever you want
    bool is_null = false; // default value
} A_NULL = {0, true};

如果找到数据,则将数据放入对象中并返回。 如果你不只是返回 A_NULL。

【讨论】:

    猜你喜欢
    • 2015-06-05
    • 1970-01-01
    • 1970-01-01
    • 2016-07-24
    • 2016-01-24
    • 1970-01-01
    • 1970-01-01
    • 2021-12-19
    • 2016-04-19
    相关资源
    最近更新 更多