.NET 4.0中是否有内置的二进制搜索树?

Ben*_*erg 61 .net c# binary-tree

.NET 4.0中是否有内置的二叉搜索树,还是需要从头开始构建这种抽象数据类型?

编辑

这具体是关于二叉搜索树,而不是一般的抽象数据类型"树".

her*_*ter 56

我认为SortedSet<T>上课System.Collections.Generic是你正在寻找的.

这个CodeProject文章:

它使用 自平衡的红黑树实现,该为插入,删除和查找提供了O(log n)的性能复杂性 .它用于保持元素按排序顺序,获取特定范围内的元素子集,或获取 集合的MinMax元素.

源代码https://github.com/dotnet/corefx/blob/master/src/System.Collections/src/System/Collections/Generic/SortedSet.cs

  • 不幸的是,这个类没有提供经典二进制搜索树的许多有用方法,例如lower_bound(在C++中用`std :: set`实现).注意GetViewBetween方法.出乎意料的是它有[线性运行时间](http://stackoverflow.com/questions/9850975/why-sortedsett-getviewbetween-isnt-olog-n) (11认同)
  • 红黑树实际上是一种特殊的二进制搜索树。请参阅我的答案以获取更多详细信息。 (2认同)

Ben*_*erg 19

在我提出这个问题五年后,我意识到在.NET 4.0中确实存在一个内置的二进制搜索树.它可能稍后添加,并按预期工作.它在每次插入后自我平衡(遍历),这会降低添加大量项目的性能.

SortedDictionary<TKey, TValue>班有以下几点意见:

SortedDictionary通用类是具有O(log n)检索的二叉搜索树,其中n是字典中元素的数量.在这方面,它类似于SortedList泛型类.这两个类具有相似的对象模型,并且都具有O(log n)检索.

  • 为什么你需要一把钥匙(也许你的模型需要它)?SortedSet&lt;T&gt; 是否已经涵盖了这一点(但没有键)? (2认同)

Muh*_*eed 8

不,.NET不包含二进制搜索树.它确实包含一个红黑树,它是一种特殊的二叉搜索树,其中每个节点都涂成红色或黑色,并且使用这些颜色有一定的规则可以保持树的平衡,并允许树保证O(logn)搜索倍.标准二进制搜索树无法保证这些搜索时间.

该类称为a SortedSet<T>,并在.NET 4.0中引入.你可以在这里查看它的源代码.以下是它的一个使用示例:

// Created sorted set of strings.
var set = new SortedSet<string>();

// Add three elements.
set.Add("net");
set.Add("net");  // Duplicate elements are ignored.
set.Add("dot");
set.Add("rehan");

// Remove an element.
set.Remove("rehan");

// Print elements in set.
foreach (var value in set)
{
    Console.WriteLine(value);
}

// Output is in alphabetical order:
// dot
// net
Run Code Online (Sandbox Code Playgroud)


小智 7

可以在http://code.google.com/p/self-balancing-avl-tree/上找到一个C#平衡的AVL二叉树.它还实现了对数连接和拆分操作