Kalau kemarin struktur data tree, kali ini kita akan bahas tentang bentuk tree yang lebih spesifik yaitu binary tree.

Untuk mengingat kembali tentang apa itu tree, silahkan kunjungi alamat berikut Tentang Struktur Data Tree – Antek Teknologi.

 

Pengertian


Binary tree adalah sebuah tree yang setiap node-nya hanya dapat memiliki maksimal 2 buah child node.

Berbeda dengan tree default’ yang setiap node-nya bisa memiliki child node sebanyak apapun.

Karena tiap node hanya boleh memiliki 2 child node, maka dari itu tree yang satu ini mengambil kata binary sebagai namanya.

Seperti yang kita tahu, binary atau biner adalah sistem bilangan yang hanya mengakui dua angka saja, yaitu 0 dan 1.

Mungkin itu sedikit tentang asal-usul nama binary tree.

Kemudian tree yang satu ini umumnya digunakan untuk menyimpan banyaknya data secara terurut.

Kita akan bahas konsep pengurutan ini pada bagian berikutnya.

Jadi konsep penempatan data secara terurut ini adalah salah satu konsep yang populer diterapkan pada binary tree.

 

Konsep Binary Tree


Sebenarnya tree yang satu ini tidak memiliki perbedaan terlalu banyak dengan treedefault‘.

Istilah seperti root, node, edge, leaf, parent dan sebagainya masih berlaku juga pada pohon biner ini.

Namun sesuai dengan penjelasan sebelumnya, tiap node hanya boleh memiliki maksimal dua buah child node.

Jika contohnya node A sudah memiliki dua buah child, maka node yang baru datang tidak boleh menjadi child dari node A itu tadi.

Tetapi masih bisa menjadi keturunan dari node A dengan cara menjadi child dari node yang merupakan child dari node A.

Jadi binary tree tidak cocok untuk merepresentasikan sebuah hirarki seperti silsilah keluarga atau jabatan dan semacamnya.

Karena pasti ada kemungkinan seseorang memiliki lebih dari 2 anak.

 

Sorting Pada Binary Tree

Jenis tree yang satu ini cocok untuk menerapkan konsep sorting atau pengurutan data.

Misalkan kita memiliki himpunan data yang merupakan kumpulan angka, di antaranya, 8, 17, 3, 5, 6, 10, 2.

Dengan binary tree, kita bisa menerapkan percabangan untuk menentukan posisi setiap node sesuai dengan nilai yang ada di dalamnya.

Hasil percabangan akan sesuai dengan angka mana yang lebih kecil atau lebih besar, mari langsung saja kita coba agar tidak bingung.

Dalam contoh kali ini, kita akan menaruh node dengan angka yang lebih besar atau sama dengan untuk bergerak ke child node kanan.

Namun untuk node dengan angka yang lebih kecil, akan bergerak ke child node kiri.

Node pertama dengan nilai 8 datang dan akan langsung menjadi root node.

Kemudian node dengan nilai 17 datang, dan kita akan lakukan perbandingan dengan node dengan angka 8.

Karena 17 yang lebih besar, maka node ini akan bergerak ke kanan.

2 Nodes

Lalu node dengan angka 3 datang, karena lebih kecil dari 8, maka akan menjadi left child node dari node 8.

3 Nodes

Lanjut ke node dengan angka 5, karena ia lebih kecil dari 8, maka ia akan bergerak ke sebelah kiri.

Tetapi karena node 8 sudah memiliki left child node, maka node 5 harus mencari tempat lain.

Karena tadi left child node dari node 8 adalah node 3, maka sekarang 5 akan dibandingkan dengan 3.

Node 5 lebih besar daripada yang bernilai 3, maka node 5 akan bergerak ke kanan dan menjadi right child node dari node 3.

Mesikpun node 5 tidak menjadi child dari node 8, tapi node 5 tetap menjadi keturunan atau descendant dari node 8.

4 Nodes

Dan berikut ini adalah beberapa gambar bagaimana binary tree tersebut terbentuk sampai dengan kedatangan node dengan angka 2.

5 Nodes

6 Nodes

7 Nodes

Jadi sekian untuk konsep dari binary tree yang berkaitan dengan proses pengurutan data atau sorting.

 

Jenis Binary Tree


Struktur data ini terbagi lagi menjadi beberapa jenis, tergantung dari posisi tiap node yang akan membentuk pola tertentu.

a. Full Binary Tree

Tree yang setiap node-nya memiliki dua buah child node, kecuali leaf node.

Full Binary Tree

b. Completed Binary Tree

Jenis yang satu ini memiliki beberapa ketentuan.

Ketentuan pertama, setiap level yang ada harus memiliki node yang lengkap, kecuali level terakhir atau terbawah.

Ketentuan kedua, jika level terbawah memiliki node tetapi tidak lengkap, maka node yang ada harus mengisi sisi kiri dahulu baru ke kanan.

Uncompleted Completed Binary Tree

c. Perfect Binary Tree

Tree yang setiap node-nya memiliki dua buah child node, kecuali leaf node.

Namun setiap leaf node harus berada di level yang sama.Perfect Binary Tree

d. Balanced Binary Tree

Jika sebuah node memiliki subtree, maka selisih height untuk subtree kanan dan kiri dari node tersebut bernilai maksimal 1.

Namun jika ada satu node saja yang selisih height dari subtree kanan dan kirinya melebihi 1, maka tree ini tidak bisa disebut balanced.

Unbalanced Balanced Binary Tree

Untuk menentukan kenapa dua tree tersebut ada yang balanced dan unbalanced, mari kita fokus ke node root atau node dengan huruf R.

Baik tree yang pertama dan yang kedua, node root sama-sama memiliki dua buah subtree, subtree kanan dan yang kiri.

Untuk tree yang pertama, selisih height antara subtree kanan dan kirinya untuk root node hanya 1, subtree yang kiri height-nya 3, sedangkan yang kanan adalah 2.

Namun untuk tree yang kedua, nilai dari selisih height-nya melebihi 1 atau lebih tepatnya bernilai 2.

Karena height dari subtree kiri adalah 3, sedangkan height dari subtree kanan hanya 1.

Maka dari itu, tree yang pertama akan dianggap balanced, sedangkan yang kedua tidak atau unbalanced.

e. Skewed Binary Tree

Binary tree yang setiap node-nya memiliki tepat satu child node saja, kecuali leaf node.

Skewed Binary Tree

 

Tree Traversal


Tree traversal adalah sebuah konsep bagaimana kita mengakses setiap node yang ada pada sebuah binary tree.

Jadi ada tiga buah jenis traversal, yaitu preorder, inorder dan postorder.

Sebelumnya sudah dijelaskan bahwa setiap node pada binary tree bisa memiliki maksimal dua buah child node.

Child-nya bisa berada di sebelah kiri atau left child node dan bisa di sebelah kanan atau right child node.

Karena ada left dan right child node ini, kita bisa menerapkan sebuah konsep yang namanya tree traversal dengan lebih teratur.

Jadi ada 3 pilihan, akses data di dalam node, pindah ke left child node dan pindah ke right child node.

Dan ketiga jenis tree traversal ini sebenarnya hanya menaruh bagian “akses data di dalam node” di 3 tempat yang berbeda.

a. Preorder

Akses data di dalam node -> Pindah ke left child node -> Pindah ke right child node.

b. Inorder

Pindah ke left child node -> Akses data di dalam node -> Pindah ke right child node.

Sekedar info, inorder traversal adalah traversal yang bisa menampilkan data secara terurut sesuai dengan penempatan node.

c. Postorder

Pindah ke left child node -> Pindah ke right child node -> Akses data di dalam node.

Kalau masih belum paham, silahkan lihat dan simak gambar di bawah ini.

Tree Traversal Example

Berdasarkan gambar di atas, kita akan coba menampilkan setiap data di dalam node menggunakan ketiga tree traversal tadi.

Dan berikut ini adalah hasil dari sebuah program sederhana yang menampilkan hasil dari ketiga tree traversal tadi sesuai dengan binary tree di atas.

Preorder, Inorder, Postorder

 

Rangkuman


Jadi struktur data binary tree merupakan salah satu jenis atau mungkin satu-satunya jenis dari struktur data tree.

Struktur data ini hanya memperbolehkan setiap node memiliki maksimal dua buah child node dan cocok untuk menyimpan data secara terurut.

Kemudian ada banyak istilah dan berbagai jenis yang bisa kalian temukan saat mempelajari binary tree.

Untuk istilah-istilah yang berlaku, secara garis besar sama dengan yang berlaku pada struktur data tree “default“.

Dan terakhir, ada 3 jenis tree traversal yang umum diterapkan pada struktur data ini, yaitu preorderinorder dan postorder.

Sekian untuk artikel ini, terima kasih.

Bagikan:

Hans

Saya hanya manusia biasa yang ingin membagi ilmu dengan tulisan.