在C#中实现红黑树

时间:2009-11-09 19:43:09

标签: c# red-black-tree

我正在寻找C#中Red-Black Tree的实现,具有以下功能:

  • 在O(log n)中搜索,插入和删除。
  • 会员类型应该是通用的。
  • 支持Comparer(T),用于按其中的不同字段对T进行排序。
  • 在树中搜索应该使用特定字段,因此它不会接受T,但它会接受字段类型对其进行排序。
  • 搜索不应只是确切的值。应支持搜索较低/较高的一个。

谢谢。

3 个答案:

答案 0 :(得分:12)

你们大多只是描述了SortedDictionary<T, U>,除了下一个最低/次高价值的二元搜索,你可以自己实现,而不会有太多困难。

是否有SortedDictionary对您不充分的具体原因?

答案 1 :(得分:2)

从C5集合库中翻录TreeSet。

答案 2 :(得分:0)

这正是PowerCollections中的OrderedDictionary。它与SortedDictionary(带有泛型的红黑树)非常相似,并且能够设置开始键/结束键并扫描该范围内的所有值。

SortedDicionary只允许公开一个GetEnumerator()函数,该函数从集合的开头开始,只允许一个MoveNext()调用,所以即使你使用LINQ也没有什么神奇的事情发生:它从头开始并运行你的表达式按顺序在每个节点上,直到找到与LINQ表达式匹配的那些节点。

OrderedDictionary有一个函数可以在特定键之前或之前获取枚举数,并在O(log n)中执行查找。

值得注意的是:PowerCollections OrderedDictionary中的枚举器是使用“yield”实现的,内存使用和枚举性能至少为O(n ^ 2)...您可以自己更改实现以使其实现一个传统的调查员,这两个问题都消失了。如果我能找到时间,我会将该补丁提交给Codeplex。