2012-08-08 13 views
10

組織図をコレクションに保存したい。 1つのノードに複数のノードを追加する必要があるので、ツリーデータ構造が自分のニーズに最も適していると思います。ツリー構造を格納するコレクションはありますか?

LinkedListは、正しく理解すれば、1つのノードを別のノードに追加できます。

私はC5 treesetコレクションを見てきましたが、1ノードに2ノード以上を追加する方法はありません。Add()

WindowsフォームライブラリのTreeviewクラスも見てきましたが、Windowsフォームのdllをサービスレイヤアプリケーションをビルドしているので、私のプロジェクトに追加したくありません。 (またはそれはいいですか?)

サードパーティによって既に提供されているツリーコレクションクラスがある場合は、自分のツリーコレクションクラスを作成したくありませんか?

お願いします。

ありがとうございます。

+0

可能な重複http://stackoverflow.com/questions/66893/tree-dataを保持することができます構造 - イン - シャープ? – ikh

+0

ありがとうikh私はそのリンクを見ましたが、自分のコレクションを作成したくありません。 1つのDLLを作成し、Nugetを介して配布している人がいるはずです。 – gunnerz

+1

事前に構築されたツリーのようなコレクションの問題点は、一般的に受け入れられているインターフェイスには合意がないことです。リスト、セット、または辞書とは異なり、ツリーとグラフは、誰がそれらを実装しているか、どのような目的のためにそれらを利用する必要があるかによって大きく異なるインターフェースを持つことができます。 C#では、あなたのロールをむしろ簡単にすることができます。それはあなたの状況でやっていることをお勧めします。 – dasblinkenlight

答えて

24

このような何かが出発点になります。ジェネリックを使用することにより、この1は何の木

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"); 
関連する問題