260 likes | 479 Views
Binary Trees. By : Fitroh Amaluddin & Galih Wasis W. Kind of Binary Tree. Binary Tree Operation. Un/Balance Tree. Order Tree. DEFINISI.
E N D
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 khususdalam tree yang takpunya node diatas. • Parent : node satu level diatassuatu node. • Child : node satu level dibawahsuatu node. • Size : banyaknya node dalamsuatu tree. • Level : banyaknyatingkatandalamsuatu tree. • Leaf : node-node dalam tree yang takmemiliki 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.
A balanced binary tree An unbalanced binary tree a a b c b c e d e f g d f h i j g h i j Balance
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 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 dengansifatjikaproses delete berpengaruhpadaposisi node tersebutdilakukanrotasisupayatetapmenjadi Binary Search Tree. Contoh : - Jika node parent dihapus, maka right child yang yangtidakmemiliki left child,maka right child tersebutakandipindahkeatassebagai parent. - Jika right child mempunyai left child, maka left childnyaakanpindahsebagai parent dari node yang beradadiatasnya.
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) { if(!PokokKosong(T)) { postOrder(T->left); postOrder(T->right); cout<<" "<<T->data; } } // Read More //Program utamaint 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<<"TampilansecaraPreOrder : "; preOrder(tampil); cout<<endl;cout<<"TampilansecaraInOrder : ";inOrder(tampil); cout<<endl;cout<<"TampilansecaraPostOrder : ";postOrder(tampil); cout<<endl; cout<<endl; getch(); return 0; } // Read More
M E L I O D
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. // 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. // 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. // 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 dilakukanmulaidariakarpohon, denganurutan: Cetakisi (data) node yang sedangdikunjungi Kunjungikiri node tersebut, Jikakiribukankosong (tidak NULL) mulailagidarilangkahpertama, terapkanuntukkiritersebut. ¬Jikakirikosong (NULL), lanjutkelangkahketiga. Kunjungikanan node tersebut, Jikakananbukankosong (tidak NULL) mulailagidarilangkahpertama, terapkanuntukkanantersebut. Jikakanankosong (NULL), prosesuntuk node iniselesai, tuntaskan