Java通用二进制搜索树无法比较T类型

Java通用二进制搜索树无法比较T类型,java,algorithm,oop,data-structures,tree,Java,Algorithm,Oop,Data Structures,Tree,下面是通用二进制搜索树的代码。我还没有实现搜索功能,因为我已经在第1、2和3行中发现了错误,我在代码中已经指出了这一点。错误显示: 未为参数类型T,T定义运算符

下面是通用二进制搜索树的代码。我还没有实现搜索功能,因为我已经在第1、2和3行中发现了错误,我在代码中已经指出了这一点。错误显示:

未为参数类型T,T定义运算符<

所以,我猜编译器不知道如何比较这些类型或类似的东西。现在,我做了一些研究,发现它与Comperable和compareTo方法有关,但作为java新手,我还没有修复代码。有没有办法解决这个问题

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),使比较器成为构造函数参数。我不。。。我不明白