В Java я написал класс дерева двоичного поиска, который добавляет узлы с использованием рекурсии. Теперь я хочу обобщить его с помощью Generics, чтобы я мог больше узнать о них.
public class GBinNode<T> {
T item;
GBinNode<T> left;
GBinNode<T> right;
public GBinNode(T newItem) {
item = newItem;
left = null;
right = null;
}
public GBinNode(T it, GBinNode<T> le, GBinNode<T> ri) {
item = it;
left = le;
right = ri;
}
public String toString() {
return item.toString()+" ";
}
}
Моя функция добавления узлов находится в следующем классе
public class GBinTree<T extends Comparable <T>> {
GBinNode<T> add(T item, GBinNode<T> bn) {
if (bn==null) {
return new GBinNode<T>(item, null, null);
}
if (item < bn.item) { // ERROR HERE
bn.left = add( item, bn.left);
}
else {
bn.right = add( item, bn.right);
}
return bn;
}
public void toString(GBinNode<T> root) {
GBinNode<T> curr = root;
if (curr == null)
return;
else {
toString(curr.left);
System.out.println(curr.toString()); // inorder traversal
toString(curr.right);
}
}
Основной класс имеет следующий код, чтобы отбросить ситуацию. Я использую строки, но тип данных может быть сложным.
GBinTree<String> bt = new GBinTree<String>();
GBinNode<String> root = null;
root = bt.add("Calex", root);
root = bt.add("Ealex", root);
root = bt.add("Balex", root);
root = bt.add("Dalex", root);
bt.toString(root);
Я начал использовать интерфейс Comparable, но потом как написать функцию CompareTo()? Я не знаю, какой тип Т будет? Ошибка, которую я получил, это "Оператор < is undefined для типа (ов) аргумента T, T".
Поиск решения, один ответ был Сравнение общих типов Java:
class Element<T extends Comparable<T>>
Я не понимаю, куда это должно идти, и как он отличается от класса, реализующего Comparable. Единственное место, где я знаю тип, находится в основном классе, так должен ли быть compareTo()? Я посмотрел на создание интерфейса GBinTree, но смутился, правильно ли он был? Любая помощь будет оценена.