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?

第三,您已将 TreeNode 指定为抽象类,但您将其用作普通类,甚至将子类设为 Node() 类。

第四和第五。这些都是次要的,但是您的 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 回答
0

这里提供了一个起点:http: //cs.uni.edu/~holmesm/docs/Session40.pdf

基本上,您的代码应该在一个新类中(例如 Node)您的 add 方法很接近。在您的 NullNode 类中设置toString()方法以返回空字符串 ( return "";),然后在 add 方法中更改this.right == nullright.toString().equals (""). 在compareTo(...)方法中,阅读上面的建议并更改obj.valueobj.getValue().

于 2013-05-03T00:22:35.050 回答