пытаюсь добавить узел в дерево в java

По какой-то причине функция add(value) не хочет работать. Я должен иметь возможность использовать Node и TreeNode для создания дочернего элемента. Это не сбалансированное дерево. Я пробовал и Node, и NodeTree, и сделал переменную с узлом, и безуспешно добавил ее.

public abstract class TreeNode implements Comparable<TreeNode>{
protected int value;
protected TreeNode left;
protected TreeNode right;

public abstract int getValue();
public abstract int getSize();
public abstract TreeNode getLeft();
public abstract TreeNode getRight();

public void add(int value){
    if (value >= this.value){
        if (this.right == null){
            this.right = new Node(value); //trying to put a node in the "right" 
        }else{
            right.add(value);
        }
    }else if(value < this.value){
        if (this.left == null){
            this.left = new Node(value); //trying to do the same thing here
        }else{
            left.add(value);
        }
    }
    }

    public String toString() {
        return (left.toString() + ", " +Integer.toString(this.value) + ", " + right.toString());
    }

public int CompareTo(TreeNode obj){
    if(this.value > obj.value){
        return 1;
    }else if(this.value < value){
        return -1;
    }else{
        return 0;
    }
}

//public void remove(int value) throws NotFoundException{

//}
}

person Procrastinator    schedule 01.05.2013    source источник
comment
Какие значения вы вводите? Чего вы ожидаете и что происходит на самом деле? Где присваивается значение, в конструкторе?   -  person Steve    schedule 02.05.2013
comment
Вы говорите, что пробовали и Node, и NodeTree. Вы пробовали TreeNode?   -  person Lone nebula    schedule 02.05.2013


Ответы (2)


У вас много ошибок в этом коде. Во-первых, вы не переопределяете метод compareTo. Вам нужно изменить «CompareTo» на «compareTo».

Во-вторых, я не могу сказать, пытаетесь ли вы создать TreeNode или Node. Расширяет ли Node TreeNode?

В-третьих, вы указали TreeNode как абстрактный класс, но используете его, как если бы это был обычный класс, даже создавая дочерние элементы как класс Node().

Четвертый и Пятый. Это второстепенные, но ваша функция добавления имеет "if (value >= this.value){} else if (value ‹ this.value), которое можно изменить на просто else. Вы также иногда используете this.variable, а иногда просто переменная. Вы действительно должны посмотреть, что они означают. Например, в вашем методе «CompareTo» есть ошибка, когда вы говорите «} else if (this.value ‹ value) {». Это проверка одной и той же переменной против самой себя .

Исправьте эти вещи, и все будет работать лучше. Трудно сказать, в чем проблема, когда вы не опубликовали класс Node, а вокруг так много мелких ошибок.

person greedybuddha    schedule 01.05.2013

Начальное место указано здесь: http://cs.uni.edu/~holmesm/docs/Session40.pdf

По сути, ваш код должен быть в новом классе (например, Node). Ваш метод добавления близок. В вашем классе NullNode установите метод toString() для возврата пустой строки (return "";), а затем в методе добавления измените this.right == null на right.toString().equals (""). В методе compareTo(...) читаем то, что было предложено выше и меняем obj.value на obj.getValue().

person Aryt    schedule 03.05.2013