我试图计算多态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中键的深度?
答案 0 :(得分:2)
好的,问题在于calcDepth
方法中的这两行代码,
return left.calcDepth(keyIn, level+1);
和
return right.calcDepth(keyIn, level+1);
您只能在具有calcDepth
方法的对象上调用calcDepth
。但是,由于calcDepth
仅在NonEmptyTree
中定义,当您到达分支的末尾并点击EmptyTree
时会发生什么?这是您收到错误的地方,因为EmptyTree
没有此方法。这花了一些时间才意识到,因为错误没有说明这一点,但因为它是Tree<K,V>
的子类,所以直接说这个方法在超类中不存在。所以我有两个建议,要么
calcDepth
方法放在超类Tree
中,以便两个子类都可以访问它或
left
或right
是否为EmptyTree
。如果是,则在这种情况下返回level+1
(假设您将空节点计为额外级别,如果不是,则返回level
)。