存储树结构的集合是啥?
Posted
技术标签:
【中文标题】存储树结构的集合是啥?【英文标题】:What collection to store a tree structure?存储树结构的集合是什么? 【发布时间】:2012-08-08 15:40:44 【问题描述】:我想将组织结构图存储在集合中。我认为树数据结构最适合我的需求,因为我需要将多个节点添加到一个节点。
LinkedList
仅提供将一个节点添加到另一个节点,如果我理解正确的话。
我查看了 C5 treeset
集合,但似乎没有 Add()
方法可以将超过 2 个节点添加到一个节点。
我还查看了 Windows 窗体库中的 Treeview
类,但我不想将 Windows 窗体 dll 添加到我的项目中,因为我正在构建一个服务层应用程序。 (或者还好吗?)
我不想编写自己的树集合类,如果第 3 方已经提供了一个?
有什么建议吗?
谢谢
【问题讨论】:
***.com/questions/66893/… 的可能重复项? 谢谢我已经看到那个链接,但我不想创建自己的收藏。肯定有人创建了一个 dll 并通过 Nuget 分发它! 预建树状集合的问题在于普遍接受的接口没有一致。与列表、集合或字典不同,树和图可能具有截然不同的接口,具体取决于实现它们的人以及它们需要使用它们的目的。 C# 使您自己的滚动变得相当容易,这是我绝对建议在您的情况下做的事情。 为什么不自己写呢?编写一个简单的树类大约需要 10 分钟。 【参考方案1】:这样的事情可以作为一个起点。通过使用泛型,这个可以容纳任何东西的树
class TreeNode<T>
List<TreeNode<T>> Children = new List<TreeNode<T>>();
T Item get;set;
public TreeNode (T item)
Item = item;
public TreeNode<T> AddChild(T item)
TreeNode<T> nodeItem = new TreeNode<T>(item);
Children.Add(nodeItem);
return nodeItem;
一个包含字符串树的样本
string root = "root";
TreeNode<string> myTreeRoot = new TreeNode<string>(root);
var first = myTreeRoot.AddChild("first child");
var second = myTreeRoot.AddChild("second child");
var grandChild = first.AddChild("first child's child");
【讨论】:
以上是关于存储树结构的集合是啥?的主要内容,如果未能解决你的问题,请参考以下文章