2012-08-08 13 views
10

Quiero almacenar un organigrama en una colección. Creo que una estructura de datos en árbol será la más adecuada para mis necesidades, ya que necesito agregar múltiples nodos a un nodo.¿Qué colección para almacenar una estructura de árbol?

LinkedList solo proporciona agregar un nodo a otro nodo, si lo entiendo correctamente.

He examinado la colección C5 treeset, pero no parece tener el método Add() para agregar más de 2 nodos a un nodo.

También he mirado Treeview clase de Windows Forms biblioteca, pero no quiero añadir Windows Forms DLL a mi proyecto, ya que estoy construyendo una aplicación de capa de servicio. (¿o está bien?)

No quiero escribir mi propia clase de colección de árboles, si ya hay uno proporcionado por terceros?

Cualquier sugerencia por favor?

Gracias

+0

duplicado Posible de http://stackoverflow.com/questions/66893/tree-data -estructura-en-c-sharp? – ikh

+0

Gracias ikh He visto ese enlace, pero no quiero crear mi propia colección. ¡Debe haber alguien que haya creado un dll y lo haya distribuido a través de Nuget! – gunnerz

+1

El problema con las colecciones arbóreas preconstruidas es que no hay acuerdo sobre la interfaz generalmente aceptada. A diferencia de las listas, los conjuntos o los diccionarios, los árboles y los gráficos podrían tener interfaces muy diferentes dependiendo de quién los está implementando y con qué propósito necesitan utilizarlos. C# lo hace bastante fácil de hacer, y eso es algo que definitivamente recomendaría hacer en su situación. – dasblinkenlight

Respuesta

24

algo como esto puede ser un punto de partida. Mediante el uso de los genéricos éste puede contener un árbol de nada

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

una muestra que tiene un árbol de cadenas

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