C# 给出 CS0019 错误:运算符无法应用于类型“T”和“T”的操作数

Fat*_*Can 1 c# avl-tree binary-search-tree

我试图将 AVL 树转换为通用树,但遇到了一些类型错误。

运算符不能应用于类型“T”和“T”的操作数

 private Node RecursiveInsert(Node current, Node n)
{
    if (current == null)
    {
        current = n;
        return current;
    }
    else if (n.data < current.data) // Gives Error        {
        current.left = RecursiveInsert(current.left, n);
        current = balance_tree(current);
    }
    else if (n.data > current.data) // Gives Error        {
        current.right = RecursiveInsert(current.right, n);
        current = balance_tree(current);
    }
    return current;
}
Run Code Online (Sandbox Code Playgroud)

///

 public class Node
{
    public T data { get; set; }
    public Node left { get; set; }
    public Node right { get; set; }
    public Node(T data)
    {
        this.data = data;
    }
}
public Node root;
Run Code Online (Sandbox Code Playgroud)

Cla*_*sen 5

编辑:不知何故,我在发布此内容之前设法剪掉了一个代码片段。

首先,Node 类中的泛型类型需要实现 ICompareable 接口来执行此操作。

 public class Node<T> where T : ICompareable
 {
     public T data { get; set; }
     public Node<T> left { get; set; }
     public Node<T> right { get; set; }
     public Node<T>(T data)
     {
         this.data = data;
     }
 }
Run Code Online (Sandbox Code Playgroud)

其次,ICompareable 不会重载“<”和“>”运算符。你需要做这样的事情

else if (n.data.CompareTo(current.data) < 0) {
    current.left = RecursiveInsert(current.left, n);
    current = balance_tree(current);
}
Run Code Online (Sandbox Code Playgroud)