我正在实现一个通用的AVL树,但我遇到了一些编译错误。
我的AVL Tee必须处理T型的Node<T>
。
在示例中,类型是Event class。我想比较节点。
但是每种类型的数据都必须进行不同的比较,为此,我将比较传递给数据本身进行比较。
我试图让Node实现Comparable Interface和Event Class一样。
我的代码结构如下所示:
树形结构:
public class AvlTree<T extends Comparable<T>> {
private Node<T> root;
public AvlTree() {
root = null;
}
//other method to insert dellete operation in the tree
}
节点结构:
public class Node<T extends Comparable<T>> implements Comparable<T> {
private T data;
private Node<T> left;
private Node<T> right;
public Node() {
}
@Override
public int compareTo(T t) {
return this.data.compareTo(t);
}
}
将放入节点对象的事件类:
public class Event implements Comparable<Event>{
private Point point;
public Event() {
}
@Override
public int compareTo(Event t) {
return 1;
}
}
给我编译错误的代码是我宣布AvlTree:
private AvlTree<Node<Event>> treeOfEvents;
错误:
类型参数
Node<Event>
不在类型变量T
的范围内 其中T是一个类型变量:
在AvlTree类中声明的T extends Comparable<T>
答案 0 :(得分:2)
你的Node必须像这里一样实现Comparable:
public class Node<T extends Comparable<T>> implements Comparable<Node<T>> {
因为您的AvlTree期望某些东西为通用类型,它实现了该类型的可比较