gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 20:40:55 27 4
gpt4 key购买 nike

我已经在这个程序上工作了几天,并且在我的 BinarySearchTree 类中实现了一些主要方法,例如插入和删除。插入似乎工作正常,但是一旦我尝试删除,我就会不断出错。因此,在玩弄了代码之后,我想测试我的 compareTo 方法。我创建了两个新节点并尝试比较它们,但出现此错误:

线程“main”java.lang.ClassCastException 中的异常:TreeNode 无法转换为 java.lang.Integer 在 java.lang.Integer.compareTo(未知来源) 在 TreeNode.compareTo(TreeNode.java:16) 在 BinarySearchTree.myComparision(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);
}

}

我做的 compareTo 方法都错了吗?我想创建可以处理整数和字符串的树(当然是分开的)

最佳答案

要确保 element 确实是一个可比较的对象,并避免所有强制转换,您可以执行以下操作:

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);
}

}

举个例子:

TreeNode<Integer> node1 = new TreeNode<Integer>(2);
TreeNode<Integer> node2 = new TreeNode<Integer>(3);
System.out.println(node1.compareTo(node2));

上面的代码片段在控制台上打印 -1

关于java - 在二叉搜索树程序中使用 compareTo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8206432/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com