2012-08-08 143 views
10

我想将组织结构图存储在集合中。我认为树型数据结构最适合我的需求,因为我需要将多个节点添加到一个节点。什么集合来存储树结构?

LinkedList仅提供增加一个节点到另一个节点,如果我理解正确。

我已经看过C5 treeset集合,但似乎没有Add()方法向一个节点添加2个以上的节点。

我也看了Treeview类从Windows窗体库,但我不希望添加Windows窗体DLL到我的项目,因为我建立一个服务层应用程序。 (或者是罚款?)

我不想写我自己的树的集合类,如果已经有一个由第三方提供的?

有什么建议吗?

谢谢

+0

的可能的复制http://stackoverflow.com/questions/66893/tree-data c-sharp结构? – ikh 2012-08-08 15:45:00

+0

感谢ikh我已经看到了这个链接,但我不想创建自己的收藏。必须有人在那里创建一个DLL并通过Nuget分发它! – gunnerz 2012-08-08 15:47:32

+1

预构建的树状集合的问题是在通用接口上没有协议。与列表,集合或字典不同,树和图可能具有截然不同的接口,取决于谁在实现它们,以及他们需要使用它们的目的。 C#让自己变得相当容易,这是我肯定会推荐在你的情况下做的事情。 – dasblinkenlight 2012-08-08 15:50:29

回答

24

这样的事情可以是一个起点。通过使用泛型这个可以容纳任何东西树

class TreeNode<T> 
{ 
    List<TreeNode<T>> Children; 

    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");