What collection to store a tree structure?

2019-01-26 06:43发布

问题:

I want to store an organisation chart in a collection. I think a tree data structure will be best suited to my needs, as I need to add multiple nodes to one node.

LinkedList only provides adding one node to another node, if I understand it correctly.

I have looked at C5 treeset collection, but it doesn't seem to have Add() method to add more than 2 nodes to one node.

I have also looked at Treeview class from Windows Forms library, but I do not want to add Windows forms dll to my project, since I am building a service layer application. (or is it fine?)

I do not want to write my own tree collection class, if there is already one provided by 3rd party?

Any suggestion please?

Thanks

回答1:

Something like this can be a starting point. By using generics this one can hold a tree of anything

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;
    }
}

A sample which holds a tree of strings

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