Binary Search Tree (BST) adalah salah satu struktur data yang mendukung pencarian lebih cepat, penyortiran cepat, dan penyisipan dan penghapusan yang mudah. Binary Search Tree juga dikenal dengan "sorted versions of binary tree".
Untuk simpul x in dari BST T,
- subtree kiri x berisi elemen yang lebih kecil dari yang disimpan dalam x,
- subtree kanan x berisi semua elemen yang lebih besar dari yang disimpan dalam x,
dengan asumsi bahwa kunci berbeda
Binary Search Tree memiliki operasi dasar berikut:
- find (x): cari kunci x di BST
- insert (x): masukkan kunci baru x ke dalam BST
- remove (x): hapus kunci x dari BST
Searching operasi : Mencari di pohon pencarian biner untuk kunci tertentu dapat diprogram secara rekursif atau berulang. Kita mulai dengan memeriksa simpul akar. Jika pohon adalah nol, kunci yang kami cari tidak ada di pohon. Jika tidak, jika kunci sama dengan root, pencarian berhasil dan kami mengembalikan node. Jika kunci kurang dari root, kami mencari subtree kiri. Demikian pula, jika kunci lebih besar dari pada root, kami mencari subtree kanan. Proses ini diulang sampai kunci ditemukan atau subtree yang tersisa adalah nol. Jika kunci tidak ditemukan setelah subtree nol tercapai, maka kunci tidak ada di pohon.
Deletion operasi : Saat menghapus node dari pohon pencarian biner, wajib untuk menjaga urutan urutan node. Ada banyak kemungkinan untuk melakukan ini. Namun, metode berikut yang telah diusulkan oleh T. Hibbard pada tahun 1962 [3] menjamin bahwa ketinggian subtree subjek diubah oleh paling banyak satu. Ada tiga kemungkinan kasus untuk dipertimbangkan:
Menghapus simpul tanpa anak: cukup hapus simpul dari pohon.
Menghapus simpul dengan satu anak: lepaskan simpul dan ganti dengan anaknya.
Menghapus simpul dengan dua anak: panggil simpul yang akan dihapus D. Jangan hapus D. Sebagai gantinya, pilih simpul pendahulunya yang berurutan atau simpul penerus yang berurutan sebagai simpul pengganti E (s. Gambar). Salin nilai pengguna E ke D. [catatan 2] Jika E tidak memiliki anak cukup hapus E dari orang tua sebelumnya G. Jika E memiliki anak, katakan F, itu adalah hak anak. Ganti E dengan F di induk E.
Dalam semua kasus, ketika D menjadi root, buat root node pengganti lagi.
Node dengan dua anak lebih sulit untuk dihapus. Pengganti urutan simpul adalah anak paling kiri dari subtree kanannya, dan pendahulu berurutan node adalah anak paling kanan subtree kiri. Dalam kedua kasus, simpul ini hanya akan memiliki satu atau tidak ada anak sama sekali. Hapus menurut salah satu dari dua kasus sederhana di atas.
Secara konsisten menggunakan penerus berurutan atau pendahulu berurutan untuk setiap contoh kasus dua anak dapat menyebabkan pohon tidak seimbang, sehingga beberapa implementasi memilih satu atau yang lain pada waktu yang berbeda.
Analisis runtime: Meskipun operasi ini tidak selalu melintasi pohon ke daun, ini selalu merupakan kemungkinan; jadi dalam kasus terburuk memerlukan waktu sebanding dengan ketinggian pohon. Itu tidak memerlukan lebih bahkan ketika node memiliki dua anak, karena masih mengikuti jalur tunggal dan tidak mengunjungi node dua kali
sumber : https://en.wikipedia.org/wiki/Binary_search_tree