小弟最近学习数据结构,试着用java写一个泛性的二叉排序树,可是遇到一个问题不知道怎么解决,请各位大哥帮忙看一下好吗?class CTNode<T>
{
T m_key;
CTNode m_left;
CTNode m_right;

CTNode(T key, CTNode left, CTNode right)
{
m_key = key;
m_left = left;
m_right = right;
}

}public class CBSTree<T>
{
private CTNode<T> root;
private final int FIRST = 1;
private final int SECCEND = 2;
         
         ......         //插入新节点
public void insertNode(T data)
{
if (root == null)
{
root = new CTNode<T>(data,null,null);
}

else
{
CTNode<T> prev;
CTNode<T> tmp = root;

while (tmp != null)
{
prev = tmp;

if (tmp.m_key < data) //编译器在这一句报错
  tmp = tmp.m_right;  //错误是:运算符<不能用于T、T 
else
  tmp = tmp.m_left;
    }
    
    if (prev.m_key > data)
       prev.m_left = new CTNode<T>(data, null, null);
    else
       prev.m_right = new CTNode<T>(data, null, null);  
}
}
         
         ......
}
那么我想问一下各位大哥,我该怎么实现T类型数据的比较呢?写一个isLessThan(T data)函数吗?可是具体该怎么实现呢?小弟很困惑,各位大哥多指点,谢谢!

解决方案 »

  1.   

    不,你的T实现comparator接口
    这个接口就2个函数
     int compare(Object o1, Object o2) 
              Compares its two arguments for order. 
     boolean equals(Object obj) 
              Indicates whether some other object is "equal to" this Comparator. 
    不过要比较的话,还是不能用<,因为java不支持运算符重载,和你自己写isLessThan效果差不多,但是以后使用java类库中的排序之类的方便很多。
      

  2.   

    class CTNode<T extends Comparable>
    {
    T m_key;
    CTNode m_left;
    CTNode m_right;

    CTNode(T key, CTNode left, CTNode right)
    {
    m_key = key;
    m_left = left;
    m_right = right;
    }

    }public class CBSTree<T>
    {
    //错误提示:需要>
             //错误提示:需要<标识符>
             private CTNode<T extends Comparable> root;
    private final int FIRST = 1;
    private final int SECCEND = 2;
    //插入新节点
    public void insertNode(T data)
    {
    if (root == null)
    {
    root = new CTNode<T extends Comparable>(data,null,null);
    }

    else
    {
    CTNode<T extends Comparable> prev;
    CTNode<T extends Comparable> tmp = root;

    while (tmp != null)
    {
    prev = tmp;

    if (tmp.m_key.compareTo(data) < 0)
      tmp = tmp.m_right;
    else
      tmp = tmp.m_left;
        }
        
        if (prev.m_key.compareTo(data) > 0)
           prev.m_left = new CTNode<T extends Comparable>(data, null, null);
        else
           prev.m_right = new CTNode<T extends Comparable>(data, null, null);  
    }
    }
    这样对吗各位大哥???可是还是有问题,凡是用到CTNode<T extends Comparable>的时候,总有“需要>”或者“需要<标识符>”的错误提示,请问,这是怎么回事?
      

  3.   

    我现在不太明白各位大哥,如果我定义interface,那么,我该怎么实现里面的isLessThan(T data)这个函数呢?