Menu
CoddyTech

Binary Tree (Pohon Biner)

Terakhir diperbarui

Binary tree adalah struktur bertingkat yang setiap node-nya memiliki paling banyak dua anak, yang disebut anak kiri dan anak kanan. Node paling atas disebut root, node tanpa anak disebut leaf (daun), dan jumlah edge dari root ke leaf terdalam adalah tinggi pohon. Tidak seperti binary search tree, binary tree biasa tidak punya aturan urutan: yang penting hanya bentuknya. Tekan Putar di atas untuk melihat pohon terisi level demi level, lalu ditelusuri secara in-order (kiri, node, kanan).

Binary tree menjadi dasar banyak struktur lain: binary search tree, heap, expression tree, dan masih banyak lagi. Penelusuran (traversal) mengunjungi setiap node dalam urutan tertentu: in-order, pre-order, dan post-order adalah tiga penelusuran depth-first, masing-masing berguna untuk tugas yang berbeda.

Istilah

IstilahArti
Root (akar)Node paling atas, tanpa induk
Leaf (daun)Node tanpa anak
Tinggi (height)Jalur terpanjang dari root ke leaf (dalam edge)
Kedalaman (depth)Jarak sebuah node dari root
Complete (lengkap)Semua level penuh kecuali mungkin level terakhir, yang diisi dari kiri ke kanan

Tiga penelusuran depth-first

PenelusuranUrutanKegunaan umum
In-orderKiri, node, kananOutput terurut dari BST
Pre-orderNode, kiri, kananMenyalin / menserialisasi pohon
Post-orderKiri, kanan, nodeMenghapus / mengevaluasi pohon

Contoh penerapan

Penelusuran in-order pada pohon yang dibangun dari [4, 2, 6, 1, 3, 5] (diisi level demi level):

LangkahDi nodeAksi
14Masuk secara rekursif ke subtree kiri 4 sebelum mengunjunginya
22Masuk secara rekursif ke subtree kiri 2 sebelum mengunjunginya
31Leaf, tanpa anak kiri: kunjungi 1, output [1]
42Kiri selesai: kunjungi 2, output [1, 2], lalu masuk ke kanan
53Leaf: kunjungi 3, output [1, 2, 3]
64Subtree kiri selesai: kunjungi 4, output [1, 2, 3, 4], lalu masuk ke kanan
75Anak kiri 6, sebuah leaf: kunjungi 5, output [1, 2, 3, 4, 5]
86Kiri selesai, tanpa anak kanan: kunjungi 6, output [1, 2, 3, 4, 5, 6]

Kapan memakai binary tree

Pakai saatHindari saat
Kamu perlu memodelkan data yang memang bertingkat (sistem file, expression tree, DOM)Datanya datar dan list atau array sudah cukup: pohon hanya menambah beban
Kamu ingin operasi berurutan dan bisa menjaga pohon tetap seimbang (BST atau pohon yang menyeimbangkan diri)Kamu butuh pencarian rata-rata O(1) berdasarkan key: hash table mengalahkan pohon apa pun
Kamu perlu memproses data terstruktur secara in-order, pre-order, atau post-orderNode disisipkan dalam urutan terurut ke BST yang tidak seimbang: pohon itu merosot menjadi list O(n)
Range query atau iterasi berurutan penting, dan hash table tidak bisa memberikannyaMemori terbatas: setiap node membawa dua pointer anak ditambah datanya

Kode Binary Tree

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

Kode Binary Tree dalam Python

Python
1from collections import deque2
3
4class Node:5    def __init__(self, value):6        self.value = value7        self.left = None8        self.right = None9
10
11def insert(root, value):12    # Level-order insert: fill the first empty child slot found13    if root is None:14        return Node(value)15    queue = deque([root])16    while queue:17        node = queue.popleft()18        if node.left is None:19            node.left = Node(value)20            return root21        queue.append(node.left)22        if node.right is None:23            node.right = Node(value)24            return root25        queue.append(node.right)26
27
28def inorder(node):29    if node is None:30        return []31    return inorder(node.left) + [node.value] + inorder(node.right)32
33
34root = None35for value in [1, 2, 3, 4, 5, 6, 7]:36    root = insert(root, value)37
38print("Root:   ", root.value)39print("Inorder:", inorder(root))
Jalankan kode ini di Playground Python

FAQ Binary Tree

Apa perbedaan binary tree dan binary search tree?

Binary tree hanya membatasi setiap node agar memiliki paling banyak dua anak, tanpa urutan. Binary search tree menambahkan aturan bahwa semua yang ada di subtree kiri lebih kecil dan semua yang ada di subtree kanan lebih besar, dan aturan inilah yang membuat pencarian cepat.

Apa itu penelusuran in-order?

Penelusuran in-order mengunjungi subtree kiri, lalu node, lalu subtree kanan, secara rekursif. Pada binary search tree, penelusuran ini menghasilkan nilai dalam urutan naik, itulah sebabnya penelusuran ini paling sering dipakai sebagai contoh.

Apa itu complete binary tree?

Complete binary tree adalah pohon yang setiap levelnya terisi penuh kecuali mungkin level terakhir, yang diisi dari kiri ke kanan. Bentuk ini memungkinkan pohon disimpan secara ringkas di dalam array (tanpa perlu pointer anak), dan begitulah binary heap diimplementasikan.

Kapan sebaiknya memakai binary tree, bukan array atau hash table?
Pakai pohon saat datamu memang bertingkat atau saat kamu butuh operasi berurutan seperti range query dan iterasi terurut, yang tidak bisa diberikan hash table. Jika kamu hanya butuh pencarian key yang cepat tanpa urutan, akses rata-rata O(1) milik hash table mengalahkan pohon, dan untuk data yang datar, array lebih sederhana dan lebih ramah cache.
Apa perbedaan tinggi dan kedalaman pada binary tree?
Kedalaman diukur dari root turun ke node tertentu, yaitu jumlah edge pada jalur dari root ke node itu. Tinggi diukur dari sebuah node turun ke leaf terdalamnya, jadi tinggi seluruh pohon sama dengan kedalaman node terdalamnya. Pohon dengan satu node memiliki tinggi 0, dan satu-satunya node itu juga memiliki kedalaman 0.
Mengapa binary tree yang tidak seimbang berkinerja sangat buruk?
Pencarian, penyisipan, dan penghapusan pada binary search tree berbiaya O(h), dengan h adalah tinggi pohon. Saat key disisipkan dalam urutan terurut, pohon menjadi garis lurus, sehingga h tumbuh menjadi n dan setiap operasi merosot menjadi O(n), tidak lebih baik daripada linked list. Pohon yang menyeimbangkan diri seperti AVL tree atau red-black tree menjaga tinggi di O(log n) untuk mencegah hal ini.
Ilustrasi bahasa pemrograman di Coddy

Kuasai algoritma bersama Coddy

Mulai