Ini mungkin sangat naif, tapi saya bertanya-tanya, itu konteks pohon biner (polos, disortir dan seimbang), dari semua jenis traversal:
- pre-order mendalam-pertama
- mendalam-urutan pertama
- kedalaman-urutan pertama pasca
- luasnya dulu
apa kegunaan sebenarnya dari yang pre dan post-order? Maksud saya, apakah ada beberapa jenis dan / atau konfigurasi pohon biner di mana pre dan / atau post-order traversal akan memberikan (beberapa) keunggulan dibandingkan dua lainnya?
AFAICS, ada beberapa jenis dan konfigurasi pohon biner tertentu yang urutan-pertama dan lebarnya mungkin memberikan keuntungan tertentu:
untuk pohon biner seimbang setiap traversal first-first akan menggunakan lebih sedikit ruang penyimpanan memori dibandingkan dengan lebar pertama (mis. untuk pohon biner seimbang dari 6 atau 7 node, tingginya 2 sehingga traversal kedalaman-pertama mana pun perlu menyimpan maksimal 2 node pada waktu tertentu, sedangkan level terakhir memiliki 3 atau 4 node sehingga traversal-first perlu menyimpan hingga 3 atau 4 node di beberapa titik). Dalam hal ini menggunakan in-order traversal menggunakan jumlah memori paling sedikit dan mengunjungi node dalam urutan alami mereka.
untuk pohon biner yang tidak seimbang, jika dekat dengan skenario penyisipan kasus terburuk, melewatinya dengan lebar-pertama akan menggunakan lebih sedikit memori dibandingkan dengan lintas kedalaman-pertama. Jadi dalam hal ini luasnya menawarkan keuntungan. Inversal traversal memiliki lagi keuntungan dari nilai-nilai kunjungan dalam tatanan alami mereka.
Namun saya tidak bisa memikirkan situasi di mana pra dan pasca-traversal akan memberikan keuntungan daripada dua lainnya.
sumber
A + B * C
, yang jauh lebih mudah dipahami untuk pengguna normal daripada awalan urutan postfix.The Artikel wikipedia memiliki deskripsi singkat baik ketika Anda ingin menggunakan berbagai jenis pencarian mendalam-pertama:
Itu bermuara pada kebutuhan logistik suatu algoritma. Misalnya, jika Anda tidak menggunakan traversal post-order selama penghapusan, maka Anda kehilangan referensi yang Anda butuhkan untuk menghapus pohon anak.
sumber
Inti dari memiliki algoritma yang berbeda untuk menangani pohon biner bukanlah untuk melakukan sesuatu dengan pohon. Pada tingkat abstrak ini, sebagian besar urutan sama baiknya dengan yang lain, karena Anda hanya mendapatkan simbol abstrak dari prosedur.
Tetapi pohon biasanya digunakan untuk mewakili hal-hal yang menarik, dan itu dapat membuat perbedaan besar dalam hasilnya. Misalnya, jika node mewakili status pencarian dalam pencarian lengkap melalui domain besar (bahkan mungkin domain tak terbatas), menurun terlebih dahulu vs memproses terlebih dahulu tidak hanya menentukan urutan urutan hasil ditemukan, bahkan dapat menentukan apakah Anda akan pernah temukan solusi sama sekali . Poinnya paling mudah untuk dilihat dengan domain tak terbatas: jika Anda turun secara tidak hati-hati, Anda mungkin mengabaikan solusi yang terletak cukup tinggi di pohon, hanya karena Anda mengambil jalan yang salah. Tetapi dalam praktiknya, karena memori dan disk juga terbatas, ini bahkan berlaku untuk domain yang sangat besar daripada benar-benar tak terbatas.
sumber