我正在使用教科书中预先编写的课程并将其实施到我的课程中。每次我尝试向树中添加一个新元素时都会抛出重复的错误,我不知道为什么,我根本没有操纵编写的代码。
基本上,程序会提示用户输入一些信息,并将该信息作为学生添加到二叉搜索树中,我从教科书中得到以下信息:
AbstractBinaryTree类:
public abstract class
AbstractBinarySearchTree<E extends Comparable<? super E>> implements
BinarySearchTree<E>
public void add( E element ) {
if ( element == null ) {
throw new SearchTreeException();
}
setRoot( add( null, this.root(), element ) );
size++;
}
...
LinkedBST课程:
public class LinkedBST<E extends Comparable<? super E>> extends
AbstractBinarySearchTree<E> {
public LinkedBST( E element ) {
if ( element == null ) {
throw new java.lang.IllegalArgumentException( "null element is illegal" );
}
this.root = new BSTNode<E> ( element );
this.size = 1;
}
protected void setRoot( BSTNode<E> newRoot ) {
this.root = newRoot;
}
protected BSTNode<E> add( BSTNode<E> parent, BSTNode<E> node, E element ) {
if ( node == null ) { // base case
node = new BSTNode<E> ( element );
node.parent = parent;
}
else { // recursive case
int compareResult = element.compareTo( node.element );
if ( compareResult < 0 ) { // recursive case - left
node.leftChild = add( node, node.leftChild, element );
}
else if ( compareResult > 0 ) { // recursive case - right
node.rightChild = add( node, node.rightChild, element );
}
else {
throw new SearchTreeException( "Duplicate element: " + element.toString() );
}
}
return node;
}
...
以及BinarySearchTree
界面,然后我实际从单独的类调用该方法:
...
AbstractBinarySearchTree<Student> tree = new LinkedBST<Student>(); //this could be a problem?
...
tree.add(new Student(studentNumber, firstName, lastName, major, gpa));
所以,我知道这部分起作用至少。我能够在树中添加至少一条记录,但是当我尝试添加第二条记录时,无论信息是什么,它都会继续抛出SearchTreeException
a(也是预先编写的)并且赢得了&#39;添加任何其他人。我仍然是抽象类和二叉搜索树的新手,所以我正在尽力实现这一点,所以如果有人能看到我出错的地方那就太棒了!
答案 0 :(得分:1)
如果查看Comparable
界面及其compareTo(..)
方法,则说明
返回负整数,零或正整数作为此对象 小于,等于或大于指定的对象。
如果您看到SearchTreeException
,则表示此段代码
int compareResult = element.compareTo( node.element );
if ( compareResult < 0 ) { // recursive case - left
node.leftChild = add( node, node.leftChild, element );
}
else if ( compareResult > 0 ) { // recursive case - right
node.rightChild = add( node, node.rightChild, element );
}
else {
throw new SearchTreeException( "Duplicate element: " + element.toString() );
}
使用了compareTo(..)
的实现,该实现返回了0
。
从评论中,您声明您使用的是默认(IDE-)创建的方法实现,该方法始终返回0
。您需要解决此问题,以便您的compareTo
方法按照javadoc中的说明进行操作。