2012-08-08 4 views
10

Je souhaite stocker un organigramme dans une collection. Je pense qu'une structure de données arborescente sera la mieux adaptée à mes besoins, car j'ai besoin d'ajouter plusieurs nœuds à un nœud.Quelle collection pour stocker une structure d'arbre?

LinkedList permet seulement d'ajouter un noeud à un autre noeud, si je le comprends correctement.

J'ai regardé C5 treeset collection, mais il ne semble pas avoir Add() méthode pour ajouter plus de 2 nœuds à un nœud.

J'ai aussi regardé Treeview classe de Windows Forms bibliothèque, mais je ne veux pas ajouter Windows Forms dll à mon projet, depuis que je suis création d'une application de la couche de service. (ou est-ce bien?)

Je ne veux pas écrire ma propre classe de collection d'arbres, s'il y en a déjà une fournie par une tierce partie?

Une suggestion?

Merci

+0

double possible de http://stackoverflow.com/questions/66893/tree-data -structure-dans-c-sharp? – ikh

+0

Merci ikh J'ai vu ce lien, mais je ne veux pas créer ma propre collection. Il doit y avoir quelqu'un là-bas qui a créé une DLL et l'a distribué via Nuget! – gunnerz

+1

Le problème avec les collections arborescentes préconstruites est qu'il n'y a pas d'accord sur l'interface généralement acceptée. Contrairement aux listes, ensembles ou dictionnaires, les arbres et les graphiques peuvent avoir des interfaces très différentes en fonction de qui les met en œuvre et dans quel but ils doivent les utiliser. C# rend plutôt facile de rouler le vôtre, et c'est quelque chose que je recommanderais de faire dans votre situation. – dasblinkenlight

Répondre

24

Quelque chose comme cela peut être un point de départ. En utilisant les médicaments génériques celui-ci peut contenir un arbre de quoi que ce soit

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

Un échantillon qui contient un arbre de cordes

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