【问题标题】:calculating the depth of polymorphic bst object recursively递归计算多态bst对象的深度
【发布时间】:2017-04-12 09:23:46
【问题描述】:

我正在尝试计算多态 bst 中键的深度(而不是空对象,空对象由 EmptyTrees 表示),但我不确定如何实现实际代码。

private int calcDepth(K keyIn, int level){ 
 if (this.key.compareTo(keyIn) == 0) return level; 

  if (this.key.compareTo(keyIn) < 0){ 
  return left.calcDepth(keyIn, level+1); 
  }

  if (this.key.compareTo(keyIn) > 0){ 
  return right.calcDepth(keyIn, level+1); 
  }

  return -1; 
}

我对 java 很陌生,所以请原谅这个问题的基本或混淆性质

所以我的问题是,我如何计算我的 bst 中键的深度?

【问题讨论】:

  • 这里的具体问题是什么?
  • 如何计算我的 bst 中键的深度
  • 你现在有什么问题?
  • 在你的类定义中,有泛型类型 K 和 V 吗?
  • 尝试将depthKeycalcDepth 方法移至Tree 类。

标签: java recursion polymorphism binary-search-tree


【解决方案1】:

好的,所以问题在于您的 calcDepth 方法中的这两行代码,

return left.calcDepth(keyIn, level+1);

return right.calcDepth(keyIn, level+1);

您只能对具有calcDepth 方法的对象调用calcDepth。但是,因为calcDepth 只在NonEmptyTree 中定义,所以当您到达分支的末端并点击EmptyTree 时会发生什么?这是您将收到错误的地方,因为EmptyTree 没有此方法。我花了一段时间才意识到,因为错误没有说明这一点,但由于它是Tree&lt;K,V&gt; 的子类,它会直接说该方法在超类中不存在。所以我有两个建议,要么

  1. calcDepth 方法放在您的超类Tree 中,以便两个子类都可以访问它

  1. 在进行递归调用之前,首先检查leftright 是否为EmptyTree。如果是,则在这种情况下返回 level+1(假设您将空节点计为额外级别,如果不是,则返回 level)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-11
    • 2015-09-28
    • 1970-01-01
    • 2010-12-15
    • 2016-08-16
    • 1970-01-01
    • 2017-03-19
    • 2021-08-10
    相关资源
    最近更新 更多