2013-05-01 4 views
0

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

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{ 

//} 
} 
+0

Какие значения вы вводите? Что бы вы ожидали и что происходит на самом деле? Где назначено значение в контрэлементе? – Steve

+1

Вы говорите, что попробовали как «Node», так и «NodeTree». Вы пробовали «TreeNode»? –

ответ

0

У вас есть множество вещей неправильно с этим кодом. Сначала вы не переопределяете метод compareTo. Вам нужно изменить «CompareTo» на «compareTo».

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

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

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

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

0

Исходное место предоставляются здесь..: http://cs.uni.edu/~holmesm/docs/Session40.pdf

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

Смежные вопросы