这是我的代码:
class BinaryTree<T>
{
private node<T> Head;
public class node<T>
{
public T Data;
public node<T> right;
public node<T> left;
public node<T> parent;
...
}
...
private void insert(ref T data, node<T> parent, ref node<T> currentChild)
{
...
{
if (currentChild.Data >= data) insert(ref data, currentChild, ref currentChild.right);
else insert(ref data, currentChild, ref currentChild.left);
}
}
}
Run Code Online (Sandbox Code Playgroud)
在上面if (currentChild.Data >= data)我得到错误:
运算符'> ='不能应用于'T'和'T'类型的操作数
我该怎么做才能解决这个错误?
Pet*_*nov 11
您需要指定T实现IComparable,以便您可以比较:
class BinaryTree<T> where T : IComparable<T>
{
...
public class node<T> where T : IComparable<T> ...
...
if (currentChild.Data.CompareTo(data) >= 0) ...
...
}
Run Code Online (Sandbox Code Playgroud)
这个问题的经典解决方案是(1)制作T IComparable<T>,或(2)IComparer<T>在课堂上使用或者使用仿函数.
(1)
class BinaryTree<T> where T : Comparable<T> ...
Run Code Online (Sandbox Code Playgroud)
(2)
class BinaryTree<T> {
private node<T> Head;
private readonly IComparer<T> comparer;
public BinaryTree(IComparer<T> comparer) {
this.comparer = comparer;
}
//...
}
Run Code Online (Sandbox Code Playgroud)