.NETの基本クラスライブラリには、コレクション(リスト、キュー、スタック、ディクショナリ)の優れたデータ構造がいくつかありますが、奇妙なことに、バイナリツリーのデータ構造は含まれていません。これは、さまざまなトラバースパスを利用するアルゴリズムなど、特定のアルゴリズムにとって非常に便利な構造です。正しく書かれた無料の実装を探しています。
私は単に盲目であり、それを見つけられません...それはBCLのどこかに埋められていますか?そうでない場合、バイナリツリー用の無料またはオープンソースのC#/。NETライブラリを推奨できますか?ジェネリックを使用することが望ましい。
編集:探しているものを明確にします。内部的にツリーを使用する順序付き辞書コレクションには興味がありません。私は実際にバイナリツリーに興味があります-サブツリーを抽出したり、ノード上で修正後のトラバーサルを実行したりすることができるように、その構造を公開するものです。理想的には、このようなクラスを拡張して、特殊なツリーの動作(赤/黒、AVL、バランスなど)を提供できます。
独自に定義できます:
public class MyTree<K, V> : Dictionary<K, MyTree<K, V>>
{
public V Value { get; set; }
}
またはキーなし:
public class MyTree<V> : HashSet<MyTree<V>>
{
public V Value { get; set; }
}
そのような実装から何を望みますか?
二分木?赤、黒?基数ツリー? Bツリー? Rツリー? R *ツリー?
ツリーはデータ構造というよりもパターンであり、パフォーマンスが重要な場所で使用される傾向があります(したがって、実装の詳細もおそらく重要です)。 BCLに何らかのツリークラスが含まれていた場合は、とにかく自分でロールするだけで済みます。
SortedDictionary
は、Tree Data Stuctureに期待されるlog(n)の挿入、検索特性として信じています。
http://msdn.Microsoft.com/en-us/library/f7fta44c(VS.80).aspx
SortedSet<T>
は、バイナリ検索ツリーとして実装されます参照。 SortedDictionary<TKey, TValue>
内部でSortedSet<T>
だからそれも二分探索木です 参照。
いいえ、「Tree<T>
- like "タイプのBCL(いつも私を困惑させてきたもの)ですが、 これは良い記事です これは、C#での独自の実装を順を追って説明します。
ツリーベースのデータ構造は、.NETが通常使用される種類のアプリケーション(ビジネスアプリ、データ移動アプリなど)ではあまり使用されないという議論をすることができたと思います。それでも、私はあなたに同意します、BCLに実装がまったくないのは奇妙です。
この記事シリーズは、特にパート3と4を自分で書く必要があったときに役立ちました。