【发布时间】:2023-03-11 15:10:01
【问题描述】:
我正在尝试在C# 中实现一个树形数据结构,我已经在C++ 中完成了 100 次
但是在这里,当我试图保持 Tree 通用以接受任何数据类型时,我已将每个 Node 的数据放在 Object 类型的对象中,如下所示:
public class Node
{
public object Data;
public Node Right;
public Node Left;
public Node(object value)
{
NodeContent = value;
Right = Left = null;
}
}
但是当我尝试实现insert 时,我需要比较Object 类型的两个对象,以便知道是在当前节点的左侧还是右侧插入一个新节点。当我尝试检查时
if(value < childPtr.Data)
其中value 是要插入的值,我收到一条错误消息,提示我无法比较Object 类型的两个对象。那么有没有办法解决这个问题?
【问题讨论】:
-
如果你想让树泛型,那么你应该使用泛型!将其设为
class Node<T> where T : IComparable<T>并使用public T Data;。然后你可以做value.CompareTo(childPtr.Data)。 -
当你说
value < childPtr.Data时,你已经在暗示对象是一个值类型,那为什么还要使用object呢? -
@AlexanderDerck 我使用了对象,所以我可以保持 Data 变量的通用性,因此树将接受任何数据类型。
-
如果我创建两个新对象,
var o1 = new object(); var o2 = new object();... 其中哪个比另一个“更大”?我插入一个浮点数,然后是一个字符串 - 你会如何比较它们?如果您想通用地执行此操作,则应使用泛型...此时您可以添加T实现IComparable<T>的约束...
标签: c# data-structures tree binary-search-tree