Java通用二进制搜索树无法比较T类型
下面是通用二进制搜索树的代码。我还没有实现搜索功能,因为我已经在第1、2和3行中发现了错误,我在代码中已经指出了这一点。错误显示: 未为参数类型T,T定义运算符< 所以,我猜编译器不知道如何比较这些类型或类似的东西。现在,我做了一些研究,发现它与Comperable和compareTo方法有关,但作为java新手,我还没有修复代码。有没有办法解决这个问题Java通用二进制搜索树无法比较T类型,java,algorithm,oop,data-structures,tree,Java,Algorithm,Oop,Data Structures,Tree,下面是通用二进制搜索树的代码。我还没有实现搜索功能,因为我已经在第1、2和3行中发现了错误,我在代码中已经指出了这一点。错误显示: 未为参数类型T,T定义运算符
import java.util.*;
import java.io.*;
public class Tree<T>
{ private Node<T> root = null;
public boolean insert(T element)
{ if (isEmpty())
{ root = new Node<T>(element);
return true; }// empty tree, Node could be inserted, return true
Node<T> current = root; // start at root
Node<T> parent; // the current Node's parent
do
{parent = current;
if (element < current.element) // 1
current = current.left; // go to left
else if (element > current.element) //2
current = current.right; // go to right
else
return false; } // duplicates are NOT allowed, element could not be inserted -> return false
while (current != null);
Node<T> node = new Node<T>(element);
if (element < current.element) // 3
parent.left = node;
else
parent.right = node;
return true; } // node successfully inserted
public boolean isEmpty() { return root == null; }
private static class Node<T> // static member class
{ Node<T> left = null;
Node<T> right = null;
final T element;
Node(T element) { this.element = element; } }
}
import java.util.*;
导入java.io.*;
公共类树
{私有节点根=null;
公共布尔插入(T元素)
{if(isEmpty())
{root=新节点(元素);
return true;}//空树,无法插入节点,return true
节点当前=根;//从根开始
节点父节点;//当前节点的父节点
做
{父=当前;
if(elementcurrent.element)//2
current=current.right;//向右走
其他的
return false;}//不允许重复,无法插入元素->return false
while(当前!=null);
节点=新节点(元素);
if(element
像
这样的比较运算符仅为数字类型定义
要比较其他类型,您需要:
- 使用实现
的类型,例如可比
。可以通过向类型变量添加约束来执行此操作:字符串
public class Tree<T extends Comparable<T>>
- 传入一个
,该比较器能够比较以下类型的实例:比较器
public boolean insert(T element, Comparator<? super T> comparator)
这样的比较运算符仅为数字类型定义
要比较其他类型,您需要:
- 使用实现
的类型,例如可比
。可以通过向类型变量添加约束来执行此操作:字符串
public class Tree<T extends Comparable<T>>
- 传入一个
,该比较器能够比较以下类型的实例:比较器
public boolean insert(T element, Comparator<? super T> comparator)
T
以实现可比较的:树
。然后使用element.compareTo(current.element)<0
@Andy Turner thaks man,这就解决了它!您需要约束T
以实现可比较的:树
。然后使用element.compareTo(current.element)<0
@Andy Turner thaks man,这就解决了它!但是如果我选择第二个选项,使用比较器,那么当我想插入一个元素,而不是插入(2.3),例如,我如何调用插入函数?插入(2.3),使比较器成为构造函数参数。我不。。。我不明白,但是如果我选择第二个选项,使用比较器,那么当我想插入一个元素,而不是插入(2.3),例如,我如何调用插入函数?插入(2.3),使比较器成为构造函数参数。我不。。。我不明白