Pustaka kelas dasar di .NET memiliki beberapa struktur data yang sangat baik untuk koleksi (Daftar, Antrean, Tumpukan, Kamus), tetapi anehnya tidak berisi struktur data apa pun untuk pohon biner. Ini adalah struktur yang sangat berguna untuk algoritme tertentu, seperti algoritme yang memanfaatkan jalur traversal yang berbeda. Saya mencari implementasi gratis yang ditulis dengan benar.
Apakah saya hanya buta, dan tidak menemukannya ... apakah itu terkubur di suatu tempat di BCL? Jika tidak, dapatkah seseorang merekomendasikan pustaka C # / .NET gratis atau sumber terbuka untuk pohon biner? Lebih disukai yang menggunakan obat generik.
EDIT: Untuk memperjelas apa yang saya cari. Saya tidak tertarik dengan koleksi kamus yang dipesan secara internal menggunakan pohon. Saya sebenarnya tertarik dengan pohon biner - yang memperlihatkan strukturnya sehingga Anda dapat melakukan hal-hal seperti mengekstrak subpohon, atau melakukan traversal pasca-perbaikan pada node. Idealnya kelas seperti itu dapat diperluas untuk menyediakan perilaku pohon khusus (mis. Merah / Hitam, AVL, Seimbang, dll).
sumber
Jawaban:
Anda benar, tidak ada apa-apa di BCL. Saya menduga ini karena pilihan apakah akan menggunakan pohon biasanya merupakan detail implementasi dan sebaliknya merupakan cara yang tidak konvensional untuk mengakses data. Artinya, Anda tidak mengatakan, "binary-search-for element # 37"; sebagai gantinya, Anda berkata, "berikan aku elemen # 37".
Tapi apakah Anda sudah melihat C5 ? Ini sangat berguna dan mereka memiliki beberapa implementasi pohon ( 1 , 2 , 3 ).
sumber
Anda bisa menentukan sendiri:
public class MyTree<K, V> : Dictionary<K, MyTree<K, V>> { public V Value { get; set; } }
Atau tidak terkunci:
public class MyTree<V> : HashSet<MyTree<V>> { public V Value { get; set; } }
sumber
Apa yang Anda inginkan dari penerapan seperti itu?
Pohon biner? Merah hitam? Pohon radix? B-tree? R-pohon? R * -pohon?
Pohon lebih merupakan pola daripada struktur data, dan mereka cenderung digunakan jika kinerja penting (jadi detail implementasi mungkin juga penting). Jika BCL menyertakan semacam kelas pohon, Anda hanya perlu menggulungnya sendiri
sumber
Saya percaya bahwa
SortedDictionary
sebagai penyisipan log (n), karakteristik pengambilan yang Anda harapkan dari Struktur Data Pohon.http://msdn.microsoft.com/en-us/library/f7fta44c(VS.80).aspx
sumber
SortedSet<T>
diimplementasikan sebagai pohon pencarian biner ref .SortedDictionary<TKey, TValue>
secara internal memanfaatkanSortedSet<T>
jadi itu juga merupakan pohon pencarian biner ref .sumber
Tidak, tidak ada
Tree<T>
tipe "-like" di BCL (sesuatu yang selalu membuat saya bingung juga) tapi berikut adalah artikel bagus yang akan memandu Anda melalui penerapan Anda sendiri di C #.Saya kira Anda dapat membuat argumen bahwa struktur data berbasis pohon kurang umum digunakan dalam jenis aplikasi yang biasanya digunakan .NET (aplikasi bisnis, aplikasi pemindahan data, dll.). Tetap saja, saya setuju dengan Anda, aneh bahwa BCL tidak memiliki implementasi sama sekali.
sumber
Seri artikel ini sangat membantu saya ketika saya harus menulis artikel saya sendiri terutama bagian 3 dan 4.
Pemeriksaan Struktur Data yang Ekstensif
sumber
Ada TreeNode yang dapat Anda gunakan. Ini tidak umum dan tersembunyi dalam bentuk windows dan digunakan dengan kontrol treeview, tetapi Anda juga dapat menggunakannya di tempat lain.
sumber