递归地计算多态bst对象的深度

时间:2017-04-11 20:18:53

标签: java recursion polymorphism binary-search-tree

我试图计算多态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中键的深度?

1 个答案:

答案 0 :(得分:2)

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

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

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

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

  1. calcDepth方法放在超类Tree中,以便两个子类都可以访问它
    1. 在进行递归调用之前,请先检查leftright是否为EmptyTree。如果是,则在这种情况下返回level+1(假设您将空节点计为额外级别,如果不是,则返回level)。