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)
编辑:不知何故,我在发布此内容之前设法剪掉了一个代码片段。
首先,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)