【问题标题】:Java: Minimum Depth of Binary search Tree RecursiveJava:二叉搜索树递归的最小深度
【发布时间】:2015-10-17 19:46:29
【问题描述】:

我正在编写代码来计算二叉树的最小深度
如果输入为 6、4、9、3、5、7、12、2、8,我的解决方案适用于树 BST
因为最小深度为 3,这是正确的。
但是当树为 3,2 时,最小深度为 1 而不是 2。
我的代码 sn-p 是:

int minimumHeightRec(TreeNode root)
        {
            if(root == null) return 0;
            int left = minimumHeightRec(root.left);
            int right = minimumHeightRec(root.right);
            if(left > right) return right + 1;
            else return left + 1;
        }

【问题讨论】:

  • 当您说“当树为 3,2 时”是指输入吗?在这种情况下,根节点为“3”,左节点为“2”,右节点为空;在这种情况下,返回 1 作为最小树深度是正确的。
  • 是的......................................

标签: java algorithm recursion tree binary-search-tree


【解决方案1】:

您的实现是正确的。预期的 minHeight 应该是 1 而不是 2。 考虑您的 [3, 2] 示例,BST 可能具有以下形式:

  3
 /
2

查看rootleft 的高度为2:(3) -> (2)

查看rootright 的高度为1:(3)

您正在寻找 BST 的 minHeight,因此采用高度的右分支 1 是正确的选择。

请注意,您可能有不同的树形,其中2 是根,但逻辑和结果将是相同的。

【讨论】:

  • 但是我在 Leetcode 中解决了这个问题并且它的显示错误。参考leetcode.com/problems/minimum-depth-of-binary-tree
  • 我知道不同之处在哪里,在您提供的链接中,它们将深度定义为 必须 有零个子节点的叶节点。这意味着在 [3, 2] 的情况下,根不计算在内,因为根 (3) 有一个子 (2)。希望这会有所帮助。
  • 我看不出你写的那棵树,凌忠,是怎么有右枝的。只有一个根 (3) 和一个带有叶子的左分支 (2)。没有正确的分支。
  • @ZaphodBeeblebrox 我应该更好地表述它,它更多的是查看rootright。请参阅编辑。
【解决方案2】:
  • else没用,因为if中有return。
  • 更多代码(TreeNode 类和 main)会很有用。

【讨论】:

  • else 实际上提高了可读性,因为它明确了在什么条件下会达到。
猜你喜欢
  • 2015-04-08
  • 1970-01-01
  • 1970-01-01
  • 2016-07-12
  • 2011-07-19
  • 1970-01-01
  • 1970-01-01
  • 2014-01-02
相关资源
最近更新 更多