0

何らかの理由で 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{

//}
}
4

2 に答える 2

0

そのコードには多くの問題があります。まず、compareTo メソッドをオーバーライドしていません。「CompareTo」を「compareTo」に変更する必要があります。

次に、作成しようとしているのが TreeNode なのか Node なのかわかりません。Node は TreeNode を拡張しますか?

3 番目に、TreeNode を抽象クラスとして指定しましたが、それを通常のクラスのように使用しており、子をクラス Node() として作成しています。

4番目と5番目。これらはマイナーですが、add 関数には "if (value >= this.value){} else if (value < this.value) があり、else に変更できます。また、this.variable を使用することもあれば、単なる変数です.これらが何を意味するのかを実際に調べる必要があります.たとえば、「CompareTo」メソッドでは、「}else if(this.value < value){」と言うところにエラーがあります.これは、同じ変数をそれ自体に対してチェックしています. .

それらを修正すると、動作が改善されます。Node クラスを投稿しなかった場合、問題が何であるかを判断するのは難しく、いたるところに非常に多くの小さなバグがあります。

于 2013-05-01T22:39:41.440 に答える