By : Fitroh Amaluddin & Galih Wasis W. Binary Trees By : Fitroh Amaluddin & Galih Wasis W. Kind of Binary Tree Binary Tree Operation Un/Balance Tree Order Tree
DEFINISI Tree adalah sebuah struktur data yang secara bentuk menyerupai sebuah pohon, yang terdiri dari serangkaian node (simpul) yang saling berhubungan. Node-node tersebut dihubungkan oleh sebuah vektor. Setiap node dapat memiliki 0 atau lebih node anak (child). Sebuah node yang memiliki node anak disebut node induk (parent). Sebuah node anak hanya memiliki satu node induk.
DEFINISI Binary Trees adalah sebuah tree yang pada masing-masing simpulnya hanya dapat memiliki maksimum 2 (dua) simpul anak. Tidak boleh lebih. P C C
Istilah Umum Root : satu-satunya node khusus dalam tree yang tak punya node diatas. Parent : node satu level di atas suatu node. Child : node satu level di bawah suatu node. Size : banyaknya node dalam suatu tree. Level : banyaknya tingkatan dalam suatu tree. Leaf : node-node dalam tree yang tak memiliki node dibawah.
Full Binary Tree Full Binary Tree (Pohon Biner Penuh) adalah pohon biner yang setiap nodenya pasti memiliki 0 atau 2 node anak.
Complete Binary Tree Complete Binary Tree mirip dengan Full Binary Tree, namun tiap subtree boleh memiliki panjang path yang berbeda. Node kecuali leaf memiliki 0 atau 2 child.
Skewed Binary Tree yaitu Binary Tree yang semua nodenya (kecuali leaf) hanya memiliki satu child.
Almost Complete Binary Tree Almost Complete Binary Tree (Pohon Biner Hampir Lengkap) adalah pohon biner yang setiap nodenya dapat memiliki 0 node anak, atau memiliki kiri, atau memiliki kanan.
An unbalanced binary tree f g h i j A balanced binary tree a b c d e f g h i j An unbalanced binary tree
Binary Insert Binary Insert Tree adalah Binary Tree dengan sifat bahwa semua left child harus lebih kecil daripada right child dan parentnya. Juga semua right child harus lebih besar dari left child serta parentnya.
Binary Insert
Binary Search Binary Search Tree adalah Binary Tree dengan sifat bahwa semua left child harus lebih kecil daripada right child dan parentnya. Juga semua right child harus lebih besar dari left child serta parentnya.
Binary Delete Binary Delete Tree adalah Binary Tree dengan sifat jika proses delete berpengaruh pada posisi node tersebut dilakukan rotasi supaya tetap menjadi Binary Search Tree. Contoh : - Jika node parent dihapus, maka right child yang yang tidak memiliki left child,maka right child tersebut akan di pindah ke atas sebagai parent. - Jika right child mempunyai left child, maka left childnya akan pindah sebagai parent dari node yang berada diatasnya.
Order Tree Ada 3 urutan dasar yang dapat digunakan untuk mengunjungi pohon, yaitu : PreOrder InOrder PostOrder
PostOrder : * + a / b c – d * e f InOrder : a + b / c * d – e * f PreOrder : a b c / + d e f * - *
Listing Program void BinaPokok(POKOK **T) { *T=NULL; } bool PokokKosong(POKOK *T) { return ((bool)(T==NULL)); void TambahNod(NOD **p, char item) { NOD *n; n=NodBaru(item); *p=n; void preOrder(POKOK *T) if(!PokokKosong(T)) { cout<<" "<<T->data; preOrder(T->left); preOrder(T->right); #include<iostream.h> #include<conio.h> #include<malloc.h> #define nil NULL struct nod { struct nod*left; char data; struct nod *right; }; typedef struct nod NOD; typedef NOD POKOK; NOD *NodBaru(char item) { NOD *n; n=(NOD *)malloc(sizeof(NOD)); if(n != NULL) { n->data=item; n->left=NULL; n->right=NULL; }return n; } // Read More
void inOrder(POKOK *T) { if(!PokokKosong(T)) { inOrder(T->left); cout<<" "<<T->data; inOrder(T->right); } void postOrder(POKOK *T) { postOrder(T->left); postOrder(T->right); cout<<" "<<T->data; // Read More //Program utama int main() { POKOK *tampil; char buah; BinaPokok(&tampil); TambahNod(&tampil, buah='M'); TambahNod(&tampil->left, buah='E'); TambahNod(&tampil->left->right, buah='I'); TambahNod(&tampil->right, buah='L'); TambahNod(&tampil->right->right, buah='O'); TambahNod(&tampil->right->right->left, buah='D'); cout<<"Tampilan secara PreOrder : "; preOrder(tampil); cout<<endl; cout<<"Tampilan secara InOrder : "; inOrder(tampil); cout<<endl; cout<<"Tampilan secara PostOrder : "; postOrder(tampil); cout<<endl; getch(); return 0; } // Read More
M O I L E D
Terima Kasih
void preOrder(POKOK *T) { if(!PokokKosong(T)) { cout<<" "<<T->data; preOrder(T->left); preOrder(T->right); } Kunjungan Pre-Order. 1. Cetak isi (data) node yang sedang dikunjungi 2. Kunjungi kiri node tersebut, - Jika kiri tidak kosong (NOT NULL) mulai lagi dari langkah pertama, terapkan untuk kiri tersebut. - Jika kiri kosong (NULL), lanjut ke langkah ketiga. 3. Kunjungi kanan node tersebut, Jika kanan tidak kosong (NOT NULL) mulai lagi dari langkah pertama, terapkan untuk kanan tersebut. Jika kanan kosong (NULL), proses untuk node ini selesai, tuntaskan proses yang sama untuk node yang dikunjungi sebelumnya. Program Pre // Back
void inOrder(POKOK *T) { if(!PokokKosong(T)) { inOrder(T->left); cout<<" "<<T->data; inOrder(T->right); } Kunjungan In-Order. 1. Kunjungi kiri node tersebut, - Jika kiri bukan kosong (tidak NULL) mulai lagi dari langkah pertama, terapkan untuk kiri tersebut. - Jika kiri kosong (NULL), lanjut ke langkah kedua. 2. Cetak isi (data) node yang sedang dikunjungi 3. Kunjungi kanan node tersebut, - Jika kanan bukan kosong (tidak NULL) mulai lagi dari langkah pertama, terapkan untuk kanan tersebut. - Jika kanan kosong (NULL), proses untuk node ini selesai, tuntaskan proses yang sama untuk node yang dikunjungi sebelumnya. Program Pre // Back
void postOrder(POKOK *T) { if(!PokokKosong(T)) { postOrder(T->left); postOrder(T->right); cout<<" "<<T->data; } Kunjungan Post-Order. Kunjungan pre-order dilakukan mulai dari akar pohon, dengan urutan: 1. Kunjungi kiri node tersebut, - Jika kiri bukan kosong (tidak NULL) mulai lagi dari langkah pertama, terapkan untuk kiri tersebut. - Jika kiri kosong (NULL), lanjut ke langkah kedua. 2. Kunjungi kanan node tersebut, - Jika kanan bukan kosong (tidak NULL) mulai lagi dari langkah pertama, terapkan untuk kanan tersebut. - Jika kanan kosong (NULL), lanjut ke langkah ketiga. 3. Cetak isi (data) node yang sedang dikunjungi. Proses untuk node ini selesai, tuntaskan proses yang sama untuk node yang dikunjungi sebelumnya. Program Pre // Back
Post Order Kunjungan pre-order dilakukan mulai root pohon, dengan urutan: Kunjungi kiri node tersebut, Jika kiri bukan kosong (tidak NULL) mulai lagi dari langkah pertama, terapkan untuk kiri tersebut. ¬Jika kiri kosong (NULL), lanjut ke langkah kedua. Kunjungi kanan node tersebut, Jika kanan bukan kosong (tidak NULL) mulai lagi dari langkah pertama, terapkan untuk kanan tersebut. Kode Program Lengkap Berikut ini kode program keseluruhan, termasuk menu tampilan, di mana di dalamnya terdapat Deklarasi Tree, Inisialisasi Tree, Penambahan Node, dan Pembacaaan serta Menampilkan Node dengan 3 macam kunjungan. Kode ditulis dengan C++ 3.00.
In Order Kunjungi kiri node tersebut, - Jika kiri bukan kosong (tidak NULL) mulai lagi dari langkah pertama,terapkan untuk kiri tersebut. -Jika kiri kosong (NULL), lanjut ke langkah kedua. Cetak isi (data) node yang sedang dikunjungi Kunjungi kanan node tersebut, - Jika kanan bukan kosong (tidak NULL) mulai lagi dari langkah pertama, terapkan untuk kanan tersebut. - Jika kanan kosong (NULL), proses untuk node ini selesai, tuntaskan proses yang sama untuk node yang dikunjungi sebelumnya.
Pre Order Kunjungan pre-order dilakukan mulai dari akar pohon, dengan urutan: Cetak isi (data) node yang sedang dikunjungi Kunjungi kiri node tersebut, Jika kiri bukan kosong (tidak NULL) mulai lagi dari langkah pertama, terapkan untuk kiri tersebut. ¬Jika kiri kosong (NULL), lanjut ke langkah ketiga. Kunjungi kanan node tersebut, Jika kanan bukan kosong (tidak NULL) mulai lagi dari langkah pertama, terapkan untuk kanan tersebut. Jika kanan kosong (NULL), proses untuk node ini selesai, tuntaskan