有人可以解释为什么我收到此错误:方法AVLNode类型的undefinedTo(AVLNode)未定义

这是我的Tree类的简化版本:

public  class AVLTree< E extends Comparable<E> >
{
    private AVLNode<E> root ;

    public AVLTree()
    {
        this.root = null;
    }

    public void insert ( AVLNode<E>  item )
    {
        if( item.getLeft().compareTo(item.getItem() ) < 0) //ERROR IS HERE
        {
        }
    }

}


以下是我的Node类的简短版本

class AVLNode <E extends Comparable<E> >
{
private AVLNode<E>  item;
private AVLNode<E>  left;

public AVLNode ( AVLNode<E> item)
{
    this.item = item;
    this.left = null;
}

public AVLNode( AVLNode<E> item, AVLNode<E> lft )
{
    this.item = item;
    this.left = lft;
}

public AVLNode<E> getItem()
{
    return this.item;
}
public AVLNode<E> getLeft()
{
    return this.left;
}


}

最佳答案

您的AVLNode类显然应如下所示:

public class AVLNode<E extends Comparable<E>> {
    private E item;

    //...

    public int compareTo(final E obj) {
        return this.item.compareTo(obj);
    }


区别:


item的类型应为E而不是AVLNode<E>,因为您要存储E而不是AVLNode


为了说明您的AVLNode是可比较的,他们可以通过委派Comparable<T>方法来实现E#compareTo()自己:

public class AVLNode<E extends Comparable<E>> implements Comparable<AVLNode<E>> {
    private E item;

    //...

    @Override
    public int compareTo(final AVLNode<E> other) {
        return this.item.compareTo(other.item);
    }
}

09-30 10:53