Saya memahami struktur pohon biner dan cara melintasinya. Namun, saya berjuang untuk menyadari kegunaan sebenarnya, tujuan dalam program dan pemrograman. Ketika saya memikirkan contoh 'kehidupan nyata' dari data hierarkis, mereka hampir pasti memiliki lebih dari 2 anak. Misalnya, dalam silsilah keluarga, seorang ibu mungkin sering memiliki lebih dari dua anak.
Apakah 'pohon biner' benar-benar hanya berguna untuk menyimpan data terkait linier karena waktu pemrosesan lebih cepat dari array dan daftar? Atau, apakah mereka melayani tujuan tertentu dalam menyimpan data hierarkis? Jika demikian, contoh apa yang ada dari aplikasi pohon biner. Data apa yang sedemikian rupa sehingga simpul memiliki paling banyak 2 anak?
data-structures
binary-tree
sw123456
sumber
sumber
Jawaban:
Tidak, pohon biner bukan untuk menyimpan data hierarkis dalam arti yang Anda pikirkan. Kasus penggunaan utama untuk pohon n-ary, di mana
n
nomor tetap, adalah kemampuan pencarian cepat , bukan hierarki semantik.Ingat permainan lama di mana satu orang memikirkan angka antara 1 dan 100, dan yang lain harus menebaknya sesedikit mungkin tebakan, dan jika Anda menebak salah, orang yang memikirkan nomor itu harus memberi tahu Anda jika Anda juga tinggi atau terlalu rendah? Menjadi membosankan setelah beberapa saat karena Anda dengan cepat mengetahui bahwa Anda harus selalu mulai dari 50, lalu pergi ke 25 atau 75, dan terus membagi rentang yang akan dicari setengah dengan setiap tebakan baru setelah itu, dan akhirnya Anda dapat menebak angka apa pun paling banyak 7 tebakan, dijamin.
Ini mungkin tidak cocok untuk permainan yang menyenangkan, tetapi properti itulah yang membuat pohon biner (dan n-ary lainnya) berguna: Anda dapat menggunakannya untuk mencari kumpulan data yang sangat besar dalam waktu yang sangat sedikit.
sumber
Setiap struktur pohon, di mana simpul dapat memiliki jumlah anak yang tidak terbatas, dapat diimplementasikan menggunakan pohon biner.
Untuk setiap simpul di pohon Anda, ganti dengan simpul dengan pointer kanan dan kiri. Pointer kiri pergi ke yang pertama dari anak-anak node. Node kanan menuju ke saudara kandung node berikutnya. Semua anak-anak dari node yang diberikan berada dalam daftar tertaut yang bergabung dengan pointer kanan mereka, dengan kepala daftar menunjuk oleh pointer kiri dari orang tua mereka.
Pohon n-ary Anda yang rumit telah menjadi pohon biner yang sederhana.
Saya yakin ini ada di Knuth, Vol. 1 di suatu tempat.
sumber
Pohon biner mengapa menggunakannya?
Dalam pemrograman Anda banyak bekerja dengan koleksi data tipe yang sama.
Dua cara dasar untuk menyimpan data ini adalah: daftar dan array yang ditautkan.
Keduanya memiliki kelebihan dan kekurangan: Dalam daftar tertaut, mudah untuk menambahkan elemen di posisi apa pun atau menghapus elemen. Tetapi akses ke elemen tertentu lebih sulit, karena Anda harus melalui daftar sampai Anda berada di elemen yang Anda inginkan.
Dengan akses array ke elemen tertentu itu mudah, tetapi lebih sulit untuk menyisipkan atau menghapus elemen karena memasukkan cara: memperpanjang array dengan satu, geser semua elemen sebelum posisi insert 1 ke kanan dan masukkan elemen.
Jadi baik daftar tertaut dan array memiliki kelemahan.
Pohon biner dibuat untuk mengatasi masalah array dan daftar tertaut:
Jadi pohon biner dibuat ketika Anda memiliki banyak data yang berubah secara teratur.
sumber