小弟最近学习数据结构,试着用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)函数吗?可是具体该怎么实现呢?小弟很困惑,各位大哥多指点,谢谢!
{
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)函数吗?可是具体该怎么实现呢?小弟很困惑,各位大哥多指点,谢谢!
这个接口就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类库中的排序之类的方便很多。
{
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>的时候,总有“需要>”或者“需要<标识符>”的错误提示,请问,这是怎么回事?