Java 在二叉搜索树程序中使用compareTo

Java 在二叉搜索树程序中使用compareTo,java,generics,binary-search-tree,compareto,Java,Generics,Binary Search Tree,Compareto,我已经在这个程序上工作了几天,并且在我的BinarySearchTree类中实现了一些主要方法,比如insert和delete。Insert似乎工作正常,但一旦我尝试删除,就会不断出错。所以在玩了这些代码之后,我想测试我的compareTo方法。我创建了两个新节点并尝试对它们进行比较,结果出现以下错误: 线程“main”java.lang.ClassCastException中出现异常:无法将TreeNode转换为java.lang.Integer 位于java.lang.Integer.com

我已经在这个程序上工作了几天,并且在我的BinarySearchTree类中实现了一些主要方法,比如insert和delete。Insert似乎工作正常,但一旦我尝试删除,就会不断出错。所以在玩了这些代码之后,我想测试我的compareTo方法。我创建了两个新节点并尝试对它们进行比较,结果出现以下错误:

线程“main”java.lang.ClassCastException中出现异常:无法将TreeNode转换为java.lang.Integer 位于java.lang.Integer.compareTo(未知源) 在TreeNode.compareTo(TreeNode.java:16) 在BinarySearchTree.myComparison(BinarySearchTree.java:177) main.main(main.java:14)

下面是我创建节点的类:

    public class TreeNode<T> implements Comparable
    {
        protected TreeNode<T> left, right;
        protected Object element;

    public TreeNode(Object obj)
    {
        element=obj;
        left=null;
        right=null;
    }

   public int compareTo(Object node)
   {
       return ((Comparable) this.element).compareTo(node);
   }
公共类TreeNode实现了可比较的
{
左、右受保护树节点;
受保护对象元素;
公共树节点(对象obj)
{
元素=obj;
左=空;
右=空;
}
公共整数比较(对象节点)
{
返回((可比较的)this.element).compareTo(节点);
}
}

我做的比较法都错了吗?我想创建能够处理整数和字符串的树(当然是分开的)

试试看

public <T> int compareTo(Object node) 
{ 
    return ((Comparable) this.element).compareTo( ( TreeNode<T> ) node ).element); 
} 
public int compareTo(对象节点)
{ 
返回((可比较的)this.element.compareTo((TreeNode)node.element);
} 

compareTo方法应用于TreeNode(作为节点参数传递),同时将其与TreeNode中包含的对象this.element进行比较。只需更改为:

return ((Comparable) this.element).compareTo(node.getElement());

假设您有getElement方法。

为了确保
元素确实是一个可比较的对象,并避免所有类型转换,您可以执行以下操作:

public class TreeNode<T extends Comparable<? super T>>
implements Comparable<TreeNode<T>> {

    protected TreeNode<T> left, right;
    protected T element;

    public TreeNode(T obj) {
        element = obj;
        left = null;
        right = null;
    }

    @Override
    public int compareTo(TreeNode<T> node) {
        return element.compareTo(node.element);
    }

}

公共类树感谢所有帮助人员!我最终让它工作了,但问题是我有点写错了变量,所以我最终把自己弄糊涂了。我传递给compareTo方法的对象是元素本身,而不是树节点。在我的另一节课上,我不断地通过一个树节点,这就是为什么它搞砸了。再次感谢。为了获得最佳效果,请使用刚刚编辑的我的文章中的绑定
@newacct来包含您的建议,谢谢!
TreeNode<Integer> node1 = new TreeNode<Integer>(2);
TreeNode<Integer> node2 = new TreeNode<Integer>(3);
System.out.println(node1.compareTo(node2));