Java 在二叉搜索树程序中使用compareTo
我已经在这个程序上工作了几天,并且在我的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) 下面是我创建节点的类: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
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));