Traversal pada Binary Search Tree: Inorder, Preorder, Postorder

Focusnic - Traversal pada Binary Search Tree: Inorder, Preorder, Postorder

Traversal adalah teknik dasar untuk menjelajahi semua node dalam sebuah struktur data pohon. Pada Binary Search Tree (BST), traversal memainkan peran penting dalam berbagai operasi, mulai dari pencarian hingga pengurutan data. Dengan traversal yang tepat, kita dapat menghasilkan urutan node sesuai kebutuhan, seperti urutan menaik (ascending) atau menuruni (descending), serta memproses simpul sebelum atau sesudah anak-anaknya.

Pentingnya traversal BST meliputi:

  • Memetakan seluruh data dalam struktur
  • Mendukung operasi penghapusan dan penyisipan
  • Menghasilkan output terurut berdasarkan nilai kunci
  • Dasar untuk algoritma lanjutan seperti balancing dan indexing

Pemahaman yang mendalam tentang traversal memudahkan programmer merancang solusi optimal untuk aplikasi database, search engine, dan sistem rekomendasi.

Macam-Macam Traversal dalam BST

1. Traversal Inorder

Inorder traversal menelusuri simpul dalam urutan: anak kiri, simpul, anak kanan. Karakteristik utamanya menghasilkan urutan data menaik pada BST. Langkah dasar:

  1. Kunjungi subtree kiri secara rekursif
  2. Tampilkan atau proses simpul saat ini
  3. Kunjungi subtree kanan secara rekursif

Dengan Inorder, kita dapat menghasilkan daftar terurut tanpa memerlukan proses sorting tambahan, efektif untuk fungsi seperti cetak terurut dan validasi struktur BST.

2. Traversal Preorder

Preorder traversal mengikuti urutan: simpul, anak kiri, anak kanan. Biasanya dipakai untuk:

  • Menduplikasi (clone) struktur pohon
  • Mengekspor data dalam format prefix
  • Membangun ulang pohon dari urutan prefix

Langkah dasar Preorder:

  1. Proses simpul saat ini
  2. Kunjungi subtree kiri
  3. Kunjungi subtree kanan

3. Traversal Postorder

Postorder traversal menelusuri dalam pola: anak kiri, anak kanan, simpul. Kegunaan umum:

  • Pembersihan memori (free node) atau penghapusan subtree
  • Evaluasi ekspresi matematika (pohon ekspresi)

Langkah dasar Postorder:

  1. Kunjungi subtree kiri
  2. Kunjungi subtree kanan
  3. Proses simpul saat ini

4. Traversal Level Order

Level Order traversal atau breadth-first traversal menelusuri pohon per level dari akar ke daun. Biasanya menggunakan queue untuk memproses simpul secara berurutan. Aplikasi umum mencakup:

  • Menentukan kedalaman pohon
  • Pencarian jalur terpendek pada pohon berarah
  • Visualisasi struktur pohon per level

Langkah dasar:

  1. Masukkan simpul akar ke dalam queue
  2. Selama queue tidak kosong, keluarkan simpul terdepan dan proses
  3. Tambahkan anak kiri dan anak kanan ke queue

Kesimpulan

Beberapa strategi optimasi serta penerapan traversal pada skenario nyata:

  • Tail Recursion untuk Inorder, Preorder, dan Postorder dapat diubah menjadi iteratif menggunakan stack manual untuk menghindari overflow.
  • Gabungkan traversal dengan operasi lain, misalnya menghitung tinggi pohon atau mencari nilai maksimum/minimum dalam satu kali jelajah.
  • Morris Traversal untuk Inorder tanpa stack dan tanpa rekursi, memanfaatkan pointer sementara untuk efisiensi ruang O(1).
  • Gunakan Level Order untuk algoritma crawling pada pohon, seperti serialisasi dan deserialisasi data untuk penyimpanan atau transfer jaringan.

Secara umum, kompleksitas waktu ketiga traversal dasar adalah O(n), di mana n adalah jumlah node. Kompleksitas ruang bervariasi:

  • Rekursif: O(h) untuk stack panggilan, dengan h tinggi pohon.
  • Iteratif (Inorder, Pre/Postorder): O(h) untuk stack manual.
  • Level Order: O(w) untuk queue, dengan w lebar maksimum pohon.

Memahami kelebihan dan keterbatasan setiap metode traversal membantu pemilihan solusi yang tepat sesuai kebutuhan aplikasi, baik minimalisasi memori maupun kecepatan akses.