如何在java中实现AVL树?为什么compareTo说来源未知?

如何在java中实现AVL树?为什么compareTo说来源未知?,java,eclipse,tree,javadoc,compareto,Java,Eclipse,Tree,Javadoc,Compareto,我正在为一个类的项目实现一个AVL树。我已经编写了搜索和插入方法,但我不确定它是否有效。当我尝试测试搜索和插入时,每当程序中的搜索方法到达compareTo语句时,它就会给出一个空指针异常。我知道,只有当有一个项目,根,搜索工作,它返回真。但根的左/右子级似乎没有链接。当我插入多个整数并搜索它们时,它不会做任何事情,或者它总是返回true 如何实现AVL树?我必须使用链表/数组列表吗?不使用任何一个都可以实现它。部分要求是我不能使用JCF中的任何内容。我花了无数个小时试图找出问题所在,我总是回到

我正在为一个类的项目实现一个AVL树。我已经编写了搜索和插入方法,但我不确定它是否有效。当我尝试测试搜索和插入时,每当程序中的搜索方法到达compareTo语句时,它就会给出一个空指针异常。我知道,只有当有一个项目,根,搜索工作,它返回真。但根的左/右子级似乎没有链接。当我插入多个整数并搜索它们时,它不会做任何事情,或者它总是返回true

如何实现AVL树?我必须使用链表/数组列表吗?不使用任何一个都可以实现它。部分要求是我不能使用JCF中的任何内容。我花了无数个小时试图找出问题所在,我总是回到一垒

当我使用.compareTo时,它告诉我来源未知。测试运行示例:

这棵树是空的吗 树木大小:2 测试左高 树高:2 线程“main”java.lang.NullPointerException中出现异常 位于java.lang.Integer.compareTo(未知源) 位于java.lang.Integer.compareTo(未知源) 在AVLTree.search(AVLTree.java:110) 位于AVLTreeTest.main(AVLTreeTest.java:13)

主要测试程序:

    public class AVLTreeTest {
        public static void main(String args[]){
            AVLTree<Integer> tree = new AVLTree<Integer>();

            tree.insert(9);
            //tree.insert(5);
            tree.insert(4);
            //tree.insert(3);
            //tree.insert(19);
            System.out.println("Is the tree empty " + tree.isEmpty());
            System.out.println("Size of tree: " + tree.size());
            System.out.println("Height of tree: " + tree.height());
            System.out.println(tree.search(9));
            System.out.println(tree.search(5));
        }
    }
弹出以下窗口:

打开声明:int java.lang.Comparable.compareTo(T arg0)
注意:此元素既没有附加的源代码也没有附加的Javadoc,因此找不到Javadoc。

Integer。如果将
null
传递给它,compareTo
将抛出
NullPointerException
。给定您的代码,它看起来像
root.getItem()
返回的
null


堆栈跟踪中的“未知源”表示有关源代码的信息不可用。在任何情况下,您都可以非常确定问题不在
Integer
标准类中,因此您应该查看来自代码的第一个跟踪条目。那就是第110行的AVLTree.java。

你的问题是什么?为什么它说我的比较行的来源未知?它显示:int java.lang.Comparable.compareTo(T arg0)注意:这个元素既没有附加的源代码也没有附加的Javadoc,因此找不到Javadoc。我还想知道我是否可以在不使用链表或数组列表的情况下实现AVL树,但我发现了这一点。您可能不需要检查jdk的代码。如果确实需要jdk的源代码,可以下载它并将其附加到eclipse中的jdk实例。注意,您还可以添加url以查看eclipse中jdk的javadoc。谢谢。我在我的学校导师的帮助下找到了答案。我不得不对我的代码做两个小而愚蠢的修改。我需要更多的睡眠,谢谢。我要比较的项目为空。校园导师帮助我发现我的构造函数没有初始化我的“项”。我所要做的就是添加这个.item=item,并在我的搜索方法中的while循环中删除一个不必要的return语句,无论搜索是否为true,它都会将我踢出。这些微小的错误将是我的死亡。
    else if(root!=null && item.compareTo(root.getItem())==0){