Menu
CoddyTech

Binary Search Tree (BST)

Terakhir diperbarui

Binary search tree adalah pohon yang menyimpan nilainya dalam urutan terurut: untuk setiap node, semua nilai di subtree kirinya lebih kecil dan semua nilai di subtree kanannya lebih besar. Untuk menyisipkan atau mencari sebuah nilai, kamu mulai dari root lalu terus bergerak ke kiri atau ke kanan sesuai hasil perbandingan, sehingga setiap langkah membagi dua ruang pencarian. Tekan Putar di atas untuk melihat nilai ditempatkan lewat perbandingan dan sebuah pencarian menuruni pohon.

Pada pohon yang seimbang, operasi-operasi ini berjalan dalam waktu O(log n). Masalahnya: menyisipkan data yang sudah terurut membuat pohon merosot menjadi linked list dengan operasi O(n). Itulah alasan varian yang menyeimbangkan diri seperti AVL tree dan red-black tree ada.

Kompleksitas waktu dan ruang

OperasiSeimbangKasus terburuk (miring)
PencarianO(log n)O(n)
PenyisipanO(log n)O(n)
PenghapusanO(log n)O(n)
RuangO(n)O(n)

Langkah demi langkah (penyisipan)

LangkahApa yang terjadi
1Jika pohon kosong, nilai baru menjadi root.
2Jika tidak, mulai dari root.
3Jika nilainya lebih kecil, pergi ke anak kiri; jika lebih besar, pergi ke kanan.
4Ulangi sampai kamu mencapai tempat yang kosong.
5Pasang nilai baru sebagai leaf di tempat itu.

Contoh penerapan

Menyisipkan [5, 3, 8, 1, 4] ke pohon kosong, satu nilai demi satu nilai:

SisipkanJalur yang dilaluiAksi
5-Pohon kosong, jadi 5 menjadi root.
353 < 5, pergi ke kiri; tempatnya kosong, pasang 3 sebagai anak kiri 5.
858 > 5, pergi ke kanan; tempatnya kosong, pasang 8 sebagai anak kanan 5.
15 -> 31 < 5 pergi ke kiri, lalu 1 < 3 pergi ke kiri; pasang 1 sebagai anak kiri 3.
45 -> 34 < 5 pergi ke kiri, lalu 4 > 3 pergi ke kanan; pasang 4 sebagai anak kanan 3.

Kapan memakai binary search tree

Pakai saatHindari saat
Kamu butuh urutan terurut sekaligus pencarian cepat, dan penyisipan datang dalam urutan acak.Datamu datang dalam keadaan terurut: BST yang tidak seimbang merosot menjadi O(n) per operasi.
Kamu ingin penelusuran in-order menghasilkan nilai dalam urutan terurut tanpa usaha tambahan.Kamu hanya butuh pengecekan keanggotaan tanpa urutan: hash table memberi pencarian rata-rata O(1).
Kamu butuh range query atau successor/predecessor dari sebuah key.Kamu butuh batas O(log n) yang terjamin: pakai AVL tree atau red-black tree yang menyeimbangkan diri.
Datanya sering berubah dan array terurut yang statis akan mahal untuk diperbarui.Datanya tetap dan hanya dibaca: array terurut dengan binary search lebih sederhana dan ramah cache.

Kode Binary Search Tree

Implementasi Binary Search Tree yang rapi dan siap dijalankan dalam Python, JavaScript, Java, C++, C. Pilih bahasa, salin kodenya, atau buka langsung di Coddy Playground.

Kode Binary Search Tree dalam Python

Python
1class Node:2    def __init__(self, key):3        self.key = key4        self.left = None5        self.right = None6
7
8def insert(node, key):9    if node is None:10        return Node(key)11    if key < node.key:12        node.left = insert(node.left, key)13    elif key > node.key:14        node.right = insert(node.right, key)15    return node  # duplicates are ignored16
17
18def search(node, key):19    if node is None:20        return False21    if key == node.key:22        return True23    if key < node.key:24        return search(node.left, key)25    return search(node.right, key)26
27
28def inorder(node):29    if node is None:30        return []31    return inorder(node.left) + [node.key] + inorder(node.right)32
33
34root = None35for key in [8, 3, 10, 1, 6, 14, 4, 7]:36    root = insert(root, key)37
38print("Inorder (sorted):", inorder(root))39print("search(6): ", search(root, 6))40print("search(5): ", search(root, 5))
Jalankan kode ini di Playground Python

FAQ Binary Search Tree

Berapa kompleksitas waktu binary search tree?
Pencarian, penyisipan, dan penghapusan bernilai O(log n) pada pohon yang seimbang, karena setiap perbandingan membuang separuh node yang tersisa. Pada kasus terburuk, yaitu pohon yang miring menjadi rantai akibat penyisipan data terurut, semuanya merosot menjadi O(n).
Apa perbedaan binary tree dan binary search tree?

Binary tree adalah pohon apa pun yang setiap node-nya memiliki paling banyak dua anak, tanpa aturan urutan. Binary search tree menambahkan aturan tetap bahwa nilai di subtree kiri lebih kecil dan nilai di subtree kanan lebih besar daripada node itu, dan aturan inilah yang memungkinkan pencarian cepat.

Mengapa binary search tree bisa menjadi lambat?
Jika nilai disisipkan dalam urutan terurut (atau terurut terbalik), setiap node baru masuk ke sisi yang sama, sehingga terbentuk pohon tinggi dan miring yang berperilaku seperti linked list, yaitu O(n) per operasi. Pohon yang menyeimbangkan diri (AVL, red-black) merotasi node untuk mencegah hal ini.
Apa perbedaan binary search tree dan hash table?
Hash table memberi pencarian rata-rata O(1), tetapi menyimpan key tanpa urutan tertentu, sehingga tidak bisa menjawab range query atau query successor. Binary search tree sedikit lebih lambat dengan O(log n), tetapi menjaga key tetap berurutan, sehingga kamu bisa menelusurinya secara terurut dan menemukan nilai terdekat. Pilih BST saat urutan penting dan hash table saat kamu hanya butuh pengecekan keanggotaan.
Kapan sebaiknya memakai pohon yang menyeimbangkan diri, bukan BST biasa?
Pakai pohon yang menyeimbangkan diri (AVL, red-black) setiap kali kamu tidak bisa mengendalikan urutan penyisipan dan butuh performa O(log n) yang terjamin. BST biasa cocok untuk belajar, untuk data kecil, atau saat key datang dalam urutan acak, tetapi tidak memberi perlindungan terhadap kasus terburuk yang miring.
Apakah penelusuran in-order pada BST menghasilkan nilai terurut?

Ya. Mengunjungi subtree kiri, lalu node, lalu subtree kanan menghasilkan key dalam urutan naik, dan ini langsung mengikuti aturan BST. Kesalahan yang umum adalah mengharapkan hal yang sama dari binary tree biasa: tanpa aturan urutan, penelusuran in-order tidak menghasilkan urutan yang bermakna.

Ilustrasi bahasa pemrograman di Coddy

Kuasai algoritma bersama Coddy

Mulai