2012-08-08 17 views
10

Bir organizasyonda bir organizasyon şemasını saklamak istiyorum. Tek bir düğüme birden çok düğüm eklemem gerektiğinden, bir ağaç veri yapısının ihtiyaçlar için en uygun olacağını düşünüyorum. Doğru şekilde anlarsam, yalnızca bir düğümün başka bir düğüme eklenmesini sağlar.Bir ağaç yapısını depolamak için hangi koleksiyon?

C5 treeset koleksiyonuna baktım, ancak bir düğümde 2'den fazla düğüm eklemek için Add() yöntemine sahip görünmüyor. Ayrıca Windows'tan Treeview sınıfa baktım

kütüphane Forms, ama ben bir hizmet katmanı uygulaması inşa ediyorum beri, Windows, projeme dll oluşturan eklemek istemiyorum. (ya da sorun değil mi?)

Zaten 3. kişi tarafından sağlanan varsa, kendi ağaç toplama dersimi yazmak istemiyorum?

Herhangi bir öneri lütfen?

Teşekkürler

+0

Olası yinelenen http://stackoverflow.com/questions/66893/tree-data tutabilir -yapı-c-keskin? – ikh

+0

Teşekkürler ben bu bağlantıyı gördüm ama kendi koleksiyonumu oluşturmak istemiyorum. Orada bir dll yaratmış ve Nuget üzerinden dağıtan biri olmalı! – gunnerz

+1

Önceden oluşturulmuş ağaç benzeri koleksiyonlarla ilgili sorun, genel kabul gören arabirim üzerinde anlaşma olmamasıdır. Listelerden, kümelerden veya sözlüklerden farklı olarak, ağaçlar ve grafikler, bunları kimin uyguladıklarına bağlı olarak çok farklı arayüzlere sahip olabilir ve bunları hangi amaçla kullanmaları gerekir. C# kendi yuvarlanmasını kolaylaştırır ve bu sizin durumunuzda kesinlikle tavsiye edeceğim bir şeydir. – dasblinkenlight

cevap

24

Böyle bir şey bir başlangıç ​​noktası olabilir. eşdeğer ilaç kullanımıyla bu bir şey bir ağaç

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

dizeleri bir ağaç tutan bir numune içinde

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"); 
İlgili konular