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

Java 递归计算多态bst对象的深度,java,recursion,polymorphism,binary-search-tree,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.

我试图计算多态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; 
}
private int-calcDepth(K-keyIn,int-level){
if(this.key.compareTo(keyIn)==0)返回级别;
如果(this.key.compareTo)(keyIn)<0{
返回左侧。calcDepth(输入,级别+1);
}
如果(this.key.compareTo(keyIn)>0{
返回右侧。calcDepth(输入,级别+1);
}
返回-1;
}
我对java非常陌生,所以请原谅这个问题的基本性质


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

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

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

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

  • calcDepth
    方法放入超类
    树中
    ,以便两个子类都可以访问它
  • 在执行递归调用之前,首先检查
    是否为
    空树
    。如果是,则在这种情况下返回
    level+1
    (假设将空节点计算为额外级别,如果不是,则只返回
    level

  • 这里的具体问题是什么?我将如何计算我的BST中键的深度?与您现在拥有的有什么问题?在您的类定义中,泛型类型K和V是否存在?尝试将
    deptkey
    calcDepth
    方法移动到
    树中。
    
    return right.calcDepth(keyIn, level+1);