Java как переопределить сравнение для универсального c В - PullRequest
0 голосов
/ 13 апреля 2020

Я действительно борюсь с этим. Я не могу понять, почему я не могу сравнить значение с Node.value ...

строка:

if (value < currentNode.value) {

проблема: оператор '<' не может быть применен к 'V ',' java .lang.Comparable '</p>

public class BinaryTree<V extends Comparable<V>> {
    Node<V> root;

    public void addNode(V value) {
        Node newNode = new Node(value);

        if (root == null) {
            root = newNode;
        } else {
            Node<V> currentNode = root;
            Node<V> parent;

            while (true) {
                parent = currentNode;

                if (value.compareTo(currentNode.value) == -1) {
                    currentNode = currentNode.left;

                    if (currentNode == null) {
                        parent.left = newNode;
                        return;
                    }
                } else {
                    currentNode = currentNode.right;

                    if (currentNode == null) {
                        parent.right = newNode;
                        return;
                    }
                }
            }
        }

    }

    public int compareTo(V v){
        if(this.V > v) return 1;
        if(this.V < v) return -1;
        else                   return 0;
    }
}

1 Ответ

0 голосов
/ 13 апреля 2020

Ваш узел также должен иметь обобщенный тип c, который расширяет сопоставимый Node<V extends Comparable<V>> и должен быть инициализирован этим обобщенным c Node<V> root - это относится ко всем переменным узла.

...