【问题标题】:Height of a Binary Search Tree [closed]二叉搜索树的高度[关闭]
【发布时间】:2017-06-25 12:55:42
【问题描述】:

我编写了用于计算 BST 高度的代码,但它给了我错误的答案。结果是 3,但我希望它是 4。谁能指出我的逻辑中的缺陷,好吗? (我将叶节点的高度定义为零,因此高度 = 边数)。

public static int getHeight(Node root){
    if(root == null || (root.right == null && root.right == null)) return 0;
    int leftHeight = getHeight(root.left);
    int rightHeight = getHeight(root.right);
    return 1 + ((leftHeight >= rightHeight) ? leftHeight : rightHeight);
}

元素按以下顺序添加到空 BST 中:

20, 50, 35, 44, 9, 15, 62, 11, 13

所以我希望它应该是这样的:

     20
   /    \
  /      \
 9        50
  \      /  \
   15   35   62
  /      \
11       44
  \
   13

编辑:发现错误。我写过

    (root.right == null && root.right == null)

而不是

    (root.left == null && root.right == null)

感谢 Peter Hall 指出。

【问题讨论】:

  • 您不能以级联形式显示 BST 吗?你确定插入正确吗?
  • 你的空格键坏了吗?
  • @WillemVanOnsem 是的,插入是正确的,我已经检查了代码的所有其他部分。唯一的缺陷必须在这个块中。
  • 这是第一行的一个简单错误。您正在检查 right == nullright == null。您可能打算将其中之一设为left
  • @PeterHall 谢谢,先生。我在这个问题上摸不着头脑。

标签: java data-structures binary-search-tree


【解决方案1】:

这是一个简单的错字。您正在检查 right == null 两次,而您几乎可以肯定是其中一个是 left == null

即这种情况:

if(root == null || (root.right == null && root.right == null)) return 0;

应该是:

if(root == null || (root.right == null && root.left == null)) return 0;

这会给你想要的答案。

【讨论】:

  • 感谢指出错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-06
  • 2013-10-19
  • 2021-12-30
  • 1970-01-01
  • 1970-01-01
  • 2013-02-07
  • 1970-01-01
相关资源
最近更新 更多