我正在尝试实现二进制搜索树,只是为了学习,我希望树是通用的。这是我到目前为止的代码(非常有限):
package lect1;
public class BinNode {
Comparable element;
BinNode left;
BinNode right;
public BinNode find(Comparable obj) {
if (element == null) {
return null;
} else if (obj.compareTo(left.element) < 0) {
left.find(obj);
} else if(obj.compareTo(right.element) > 0) {
right.find(obj);
} else {
return this;
}
return null;
}
public void insert(Comparable obj) {
}
}
但是,我收到错误消息Unchecked调用'compareTo(T)'作为原始类型'java.lang.Comparable'的成员。你们中的任何人都可以解释一下如何解决这个问题。
答案 0 :(得分:1)
Comparable<T>
是一种通用类型,但您使用的是 raw 类型,从而失去了类型安全性。您可能希望在其元素类型中使BinNode
泛型:
public class BinNode<T extends Comparable<T>> {
private T element;
private BinNode<T> left;
private BinNode<T> right;
public BinNode<T> find(T obj) {
// TODO: Handle the cases where left or right is null
if (element == null) {
return null;
} else if (obj.compareTo(left.element) < 0) {
return left.find(obj);
} else if (obj.compareTo(right.element) > 0) {
return right.find(obj);
} else {
return this;
}
}
public void insert(T obj) {
}
}
T
上的约束确保元素可以相互比较。
请注意,我还修复了您的递归 - 之前您正在调用left.find()
或right.find()
,但忽略了返回值。