Первый раз публикую. Не могу найти ответ, поэтому вот:
Введение. Это часть моего домашнего задания. Задание состояло в том, чтобы работать с целочисленным бинарным деревом. Первые 3 шага заключались в программировании дюжины методов для манипулирования и игры с деревом, таких как добавление новых узлов, подсчет, обход, суммирование и т. д. 4-я часть требовала создания точно такого же класса только для строк, где значения будут сравниваться с использованием метода compareTo. .
Проблема. На следующем этапе присваивания необходимо использовать полиморфизм, чтобы разрешить узлам принимать либо целое число, либо строку. Поскольку я только кратко познакомился с этим на нашей последней лекции, я обнаружил, что застрял на последние несколько часов в поисках решения, но безуспешно.
Код:
public class Node<T extends Comparable<T>> {
T val;
Node<T> left, right;
public Node(T val) {
this.val = val;
this.left = null;
this.right = null;
}
public Node<T> insert(Node n, T v) {
if (n == null) {
return new Node(v);
}
if (v.compareTo(n.val) == 0) {
return n;
}
if (v.compareTo(n.val) < 0) {
n.left = insert(n.left, v);
} else {
n.right = insert(n.right, v);
}
return n;
}
...
}
Проблема заключается в использовании compareTo()
для типов Raw. Я нигде не могу найти, как мне сравнить два объекта/необработанных типа. Я пробовал множество вариантов, обычно все с одинаковыми результатами. Отладчик постоянно напоминает мне "несовместимые типы: Comparable нельзя преобразовать в T". Как именно мне нужно реализовать Comparable, чтобы это двоичное дерево работало?
n
изinsert
необработан? Параметризуйте его. - person Sotirios Delimanolis   schedule 21.06.2014Node
? Почему бы просто не передать значение вместо этого? - person Makoto   schedule 21.06.2014