为什么.NET中没有Tree <T>类?
.NET中的基类库对于集合(List,Queue,Stack,Dictionary)具有一些优秀的数据结构,但奇怪的是它不包含二叉树的任何数据结构。 对于某些algorithm来说,这是非常有用的结构,比如那些利用不同的遍历path的algorithm。 我正在寻找一个正确的书面,免费的实施。
我只是盲目的,而不是find它…它被埋在BCL的某个地方吗? 如果没有,有人可以推荐一个免费或开源C#/ .NET二进制树库? 最好使用generics的一个。
编辑:澄清我在找什么。 我对在内部使用树的有序字典集合不感兴趣。 实际上,我对二叉树感兴趣,它揭示了它的结构,以便您可以像提取子树一样执行操作,或者在节点上执行后缀遍历。 理想的情况下,这样的一个类可以扩展到提供特定树木(即红/黑,AVL,平衡等)的行为。
你是对的,BCL没有任何东西。 我怀疑这是因为select是否使用树通常是一个实现细节,否则是一种非常规的访问数据的方式。 也就是说,你不要说,“二进制search元素#37”; 相反,你说,“让我元素#37”。
但你有没有看看C5 ? 这是超级方便的,他们有几个树的实现( 1,2,3 )。
你可以定义你自己的:
public class MyTree<K, V> : Dictionary<K, MyTree<K, V>> { public V Value { get; set; } }
或者不加键入:
public class MyTree<V> : HashSet<MyTree<V>> { public V Value { get; set; } }
你想从这样的实现中得到什么?
二叉树? 红黑? 基数树? B树? R树? R * – 树?
树比数据结构更像一种模式,它们倾向于在性能很重要的地方使用(所以实现细节可能也很重要)。 如果BCL包括某种树类,那么只需要自己推出自己的树
我相信SortedDictionary
作为日志(n)插入,您将从树数据结构期望的检索特性。
http://msdn.microsoft.com/en-us/library/f7fta44c(VS.80).aspx
SortedSet<T>
被实现为二叉查找树ref 。 SortedDictionary<TKey, TValue>
内部使用SortedSet<T>
所以它也是一个二叉search树引用 。
不,BCL中没有任何“ Tree<T>
-like”types的东西(一直困惑着我),但是这里有一篇很好的文章 ,可以引导你在C#中实现自己的东西。
我猜你可能会说,基于树的数据结构不常用于.NET通常用于的应用程序(业务应用程序,数据移动应用程序等)。 不过,我同意你的看法,奇怪的是BCL根本没有实施。
这一系列的文章对我来说是很有帮助的,特别是第三部分和第四部分。
数据结构的广泛考察
有一个TreeNode可以使用。 它不是通用的,隐藏在windows窗体中,并与treeview控件一起使用,但是您也可以在其他地方使用它。