“binary tree” universitas brawijaya

advertisement
MAKALAH DESAIN DAN ANALISIS ALGORITMA
“BINARY TREE”
DISUSUN OLEH :
1. Nadim Achmad
(105060 807111009)
2. Dzurratul Ulya
(105060807111120)
3. Safer Yusuf
(105060803111004 )
PROGRAM TEKNOLOGI INFORMASI DAN ILMU KOMPUTER
UNIVERSITAS BRAWIJAYA
KATA PENGANTAR
Puji Syukur kami panjatkan kehadirat Allah SWT karena berkat limpahan rahmat
dari-NYA kami selaku kelompok I dapat menyelesaikan makalah ini tepat pada
waktunya,walaupun dalam keadaan yang sangat sederhana.
Makalah ini berisikan tidak lanjut dari materi pembelajaran kita yang berjudul
“Binary Tree” .
Dengan segala keterbatasan yang kami miliki kami sajikan makalah ini dalam bentuk
yang sangat sederhana maka dari itu kami selaku panyaji minta maaf yang sebesar-besarnya
jika makalah ini masih begitu banyak kekurangan, baik itu yang kami sengaja ataupun tidak
karena ini senua masih dalam proses pembelajaran kami yang tentunya tak lepas dari kodrad
kami sebagai manusia biasa yang tak akan pernah luput dari kesalahan.
Malang, 20 Mei 2012
Kelompok I
BAB 1
PENDAHULUAN
1.1. Latar Belakang
Tree merupakan salah satu bentuk struktur data tidak linear yang menggambarkan
hubungan yang bersifat hirarkis (hubungan one to many) antara elemen-elemen. Tree
bisa didefinisikan sebagai kumpulan simpul/node dengan satu elemen khusus yang
disebut Root dan node lainnya terbagi menjadi himpunan-himpeunan yang saling tak
berhubungan satu sama lainnya (disebut subtree).Tree juga adalah suatu graph yang
acyclic, simple, connected yang tidak mengandung loop.
Sebuah binary search tree (bst) adalah sebuah pohon biner yang boleh kosong,
dan setiap nodenya harus memiliki identifier/value. value pada semua node subpohon
sebelah kiri adalah selalu lebih kecil dari value dari root, sedangkan value subpohon di
sebelah kanan adalah sama atau lebih besar dari value pada root, masing – masing
subpohon tersebut (kiri&kanan) itu sendiri adalah juga bst.
Struktur data bst sangat penting dalam struktur pencarian, misalkan, dalam kasus
pencarian dalam sebuah list, jika list sudah dalam keadaan terurut maka proses
pencarian akan sangat cepat, jika kita menggunanan list contigue dan melakukan
pencarian biner. akan tetapi, jika kita ingin melakukan perubahan isi list (insert atau
delete), menggunakan list contigue akan sangat lambat, karena proses insert dan delete
dalam list contigue butuh memindahkan banyak elemen setiap saat. mungkin kita bisa
juga menggunakan linked-list, yang untuk operasi insert atau delete tinggal mengatur –
atur pointer, akan tetapi pada n-linked list, kita tidak bisa melakukan pointer
sembarangan setiap saat, kecuali hanya satu kali dengan kata lain hanya secara
sequential.
1.2 Permasalahan
 Pengertian Binary Tree
Binary tree merupakan salah satu bentuk struktur data tidak linear yang
menggambarkan hubungan yang bersifat hirarkis (hubungan one to many) antara
elemen-elemen. Tree bisa didefinisikan sebagai kumpulan simpul/node dengan satu
elemen khusus yang disebut Root dan node lainnya terbagi menjadi himpunanhimpunan yang saling tak berhubungan satu sama lainnya (disebut subtree).
Dalam tree terdapat jenis-jenis tree yang memiliki sifat khusus, diantaranya adalah
binary tree.
Binary Tree adalah Suatu tree dengan syarat bahwa tiap node (simpul) hanya
boleh memiliki maksimal dua subtree dan kedua subtree tersebut harus terpisah. Tiap
node dalam binary tree hanya boleh memiliki paling banyak dua child (anak simpul),
Secara khusus anaknya dinamakan kiri dan kanan.
Binary Tree merupakan himpunan vertex-vertex yang terdiri dari 2 subtree
(dengan disjoint) yaitu subtree kiri dan subtree kanan. Setiap vertex dalam binary tree
mempunyai derajat keluar max = 2.
Contoh :
(1)
(2)
A
B
(3)
A
A
C
B
B
D
Derajat keluar = 2
A adalah subtree kanan
A adalah subtree kiri
(4)
(5)
A
A
B
B
C
E
Bukan Binary Tree tapi
General Tree karena bukan
D
F
Bukan Binary Tree tapi General Tree
karena mempunyai derajat keluar > 2.
Sebuah pohon biner adalah grafik asiklis yang terhubung dimana setiap tingkatan
dari sudut tidak lebih dari 3. Ini dapat ditunjukan bahwa dalam pohon biner manapun,
terdapat persis dua atau lebih simpul dengan tingkat satu daripada yang terdapat dengan
tingkat tiga, tetapi bisa terdapat angka apa saja dari simpul dengan tingkat dua. Sebuah
pohon biner berakar merupakan sebuah grafik yang mempunyai satu dari sudutnya
dengan tingkat tidak lebih dari dua sebagai akar.
Dengan akar yang dipilih, setiap sudut akan memiliki ayah khusus, dan diatas dua
anak; bagaimanapun juga, sejauh ini terdapat keterbatasan informasi untuk membedakan
antara anak kiri atau kanan. Jika kita membuang keperluan yg tak terkoneksi,
membolehkan bermacam koneksi dalam komponen di gafik, kita memanggil struktur
sebuah hutan.
Sebuah jalan lain untuk mendefinisikan pohon biner melalui definisi rekursif pada
grafik langsung. Sebuah pohon biner dapat berarti:


Sebuah sudut tunggal.
Sebuah graf yang dibentuk dengan mengambil dua pohon biner, menambahkan
sebuah sudut, dan menambahkan sebuah panah langsung dari sudut yang baru ke akar
daris setiap pohon biner.
Pohon biner dapat dikonstruksi dari bahasa pemrograman primitif dalam berbagai cara.
Dalam bahasa yang menggunakan records dan referensi, pohon biner secara khas
dikonstruksi dengan mengambil sebuah struktur simpul pohon yang memuat beberapa
data dan referensi ke anak kiri dan anak kanan.
Kadang-kadang itu juga memuat sebuah referensi ke ayahnya yang khas. JikA sebuah
simpul mempunyai kurang dari dua anak, beberapa penunjuk anak dapat diatur kedalam
nilai nol khusus, atau ke sebuah simpul sentinel.
Pohon biner dapat juga disimpan sebagai struktur data implisit dalam array, dan jika
pohon tersebut merupakan sebuah pohon biner lengkap, metode ini tidak boros tempat.
Dalam penyusunan yang rapat ini, jika sebuah simpul memiliki indeks i, anaknya dapat
ditemukan pada indeks ke-2i+1 dan 2i+2, meskipun ayahnya (jika ada) ditemukan pada
indeks lantai((i-1)/2) (asumsikan akarnya memiliki indeks kosong). Metode ini
menguntungkan dari banyak penyimpanan yang rapat dan memiliki referensi lokal yang
lebih baik, tersitimewa selama sebuah preorder traversal. Bagaimanapun juga, ini terlalu
mahal untuk perkembangannya dan boros tempat sebanding dengan 2h - n untuk sebuah
pohon dengan tinggi h dengan nsimpul.
Ini juga tidak menentukan susunan anak, tetapi memperbaiki akar tertentu.
Pada Binary Tree terdapat yang namanya simpul (node). Node pada binary tree
maksimum berjumlah 2n-1 dan jumlah maksimum pada setiap tingkat adalah 2n
A
Tingkat ke-0, jumlah max=2’
Tingkat ke-1, jumlah max=2’
C
B
Tingkat ke-2, jumlah max=2’
D
E
F
G
Penghitungan jumlah node dalam tree dilakukan dengan cara mengunjungi setiap
node, dimulai dari root ke subtree kiri, kemudian ke subtree kanan dan masing-masing
node dicatat jumlahnya, dan terakhir jumlah node yang ada di subtree kiri dijumlahkan
dengan jumlah node yang ada di subtree kanan ditambah 1 yaitu node root.
Node root dalam sebuah tree adalah suatu node yang memiliki hiarki tertinggi
dan dapat juga memiliki node-node anak. Semua node dapat ditelusuri dari node root
tersebut. Node root adalah node khusus yang tercipta pertama kalinya. Node-node lain
di bawah node root saling terhubung satu sama lain dan disebut subtree. Contoh
penggunaan struktur pohon adalah pada silsilah keluarga, hasil pertandingan yang
berbentuk turnamen, struktur organisasi dari sebuah perusahaan
 Jenis-Jenis Binary Tree
Pada binary tree terdapat tiga jenis atau bentuk binary tree, diantaranya yaitu:
1. Full Binary Tree yaitu semua node atau simpul (kecuali leaf) pasti memiliki 2 anak dan
tiap subtree memiliki panjang path yag sama.
A
B
D
C
E
F
G
2. Complete Binary Tree yaitu pada dasarnya mirip dengan full binary tree, tapi tiap subtree
boleh memiliki panjang path yang berbeda dan tiap node ((kecuali left ) memiliki 2 anak.
A
B
C
D
E
3. Skewed Binary Tree yaitu binary tree yang semua nodenya (kecuali leaf) hanya memiliki
satu anak.
D
A
E
B
C
F
 Operasi-Operasi pada Binary Tree
Pada binary terdapat beberapa operator yang digunakan di dalamnya, diantaranya
adalah:
1. Create, berguna untuk membentuk sebuah tree baru yang kosong.
pohon = NULL;
2. Search adalah tree yang terurut dimana aturannya Semua data dibagian kiri subtree dari node t selalu lebih kecil dari data dalam node t itu sendiri dan semua data
dibagian kanan sub-tree dari node t selalu lebih besar atau sama dengan data
dalam node t.
3. Clear, berguna untuk menghapus semua elemen tree.
pohon = NULL;
4. Empty, berguna untuk mengetahui apakah tree kosong atau tidak
int isEmpty(Tree *pohon){
if(pohon == NULL) return 1;
else return 0;}
5. Insert, digunakan untuk menambah node ke dalam Tree secara rekursif. Jika data
yang akan dimasukkan lebih besar daripada elemen root, maka akan diletakkan di
node sebelah kanan, sebaliknya jika lebih kecil maka akan diletakkan di node
sebelah kiri. Untuk data pertama akan menjadi elemen root.
6. Find, digunakan untuk mencari node di dalam Tree secara rekursif sampai node
tersebut ditemukan dengan menggunakan variable bantuan ketemu. Syaratnya
adalah tree tidak boleh kosong.
7. Traverse yaitu operasi kunjungan terhadap node-node dalam pohon dimana
masing-masing node akan dikunjungi sekali.
8. Count, digunakan untuk menghitung jumlah node dalam Tree
9. Height, digunakan untuk mengetahui kedalaman sebuah Tree
10. Find Min dan Find Max, digunakan untuk mencari nilai terkecil dan terbesar
pada Tree
11. Child, digunakan untuk mengetahui anak dari sebuah node (jika punya)
Pada operator-operator yang bekerja pada binary tree terdapat beberapa operator yang
memilki pendefenisian secara khusus, diataranya yaitu search, create, insert, transverse
dan delete yang akan dibahas dalm makalah ini.

Binary Search Tree
Binary Search Tree adalah tree yang terurut (ordered Binary Tree). Aturan yang
harus dipenuhi untuk membangun sebuah BST adalah sebagai berikut:
1. Semua data dibagian kiri sub-tree dari node t selalu lebih kecil dari data dalam node t
itu sendiri.
2. Semua data dibagian kanan sub-tree dari node t selalu lebih besar atau sama dengan
data dalam node t.
Suatu binary search tree dari himpunan N record (N1, N2, N3 . . . Nn) adalah suatu
Binary Tree yang setiap vertex-nya (sebut Ri) ditempati oleh Ni untuk i=1,2,3 ... N.
Vertex-vertex dari Binary Tree tsb. diatur sedemikian rupa sehingga untuk setiap Ri harus
memenuhi syarat sbb :
1.
Jika Rj = left (Ri) maka Nj < Ni
2.
Jika Rj = right (Ri) maka Nj > Ni
Contoh :
Diketahui key dari 7 record (K, M, L, N, P, O, Q)
Binary Search Tree dari 7 key diatas dapat dibentuk :
K
N
M
L
K
M

Trnsversal dalam binary tree
Transversal dakam binary tree adalah proses menelusuri suatu Binary Tree
sehingga sedemikian rupa setiap vertex dikunjungi hanya 1 kali.
3 aktivitas dalam Binary tree Transversal :
1. Visit the Root
2. Transverse the left subtree
3. Transverse the right subtree
Beberapa macam pola penelusuran dalam Binary Tree Transversal :
1. Pre – Order-Transversal
Pre order Transversal adalah penelusuran yang dimulai dari semua simpul
induk kemudian melajutkan penelusuran pada anak simpul yang dimulai dari anak
simpul kiri kemudian anak simpul kanan.
1
2
3
7
6
4
8
9
5
2. In-Order-Transversal
In order transversal adalah penelusuran dimulai dari simpul anak disebelah kiri
kemudian penelusuran dilanjutkan pada simpul induk dan yang terakhir pada
simpul anak yang beradad di bagian kanan.
6
4
2
1
7
5
3
8
9
3. Post-Order-Transversal
Post Order Transversal adalah penelusuran dimulai dari simpul anak kiri
kemudian simpul anak kanan dan penelusuran terakhir ditujukan pada simpul
induk.
9
5
3
8
4
1
6
7
2
4. Level-Order-Transversal
Level Order Transversal adalah penelusuran dimulai dari tingkat ke i dan
dilanjutka pada tingkat ke ( i+1).
1
2
5
5
4
8
3
6
7
9
1.3 Tujuan
Adapun tujuan dari pembuatan makalah ini yaitu:
1. Untuk mengetahui defenisi dari Binary Tree
2. Untuk mengetahui bagaimana pembagian atau jenis-jenis Binary Tree
3. Untuk mengetahui Operator-operator apa saja yang bekerja di dalam Binary Tree.
BAB 2
TINJAUAN PUSTAKA
2.1 Konsep Algoritma
Konsep algoritma yang dipakai yaitu,
•
Decrease and conquer: metode desain algoritma dengan mereduksi persoalan menjadi
beberapa sub-persoalan yang lebih kecil, tetapi selanjutnya hanya memproses satu
sub-persoalan saja.Berbeda dengan divide and conquer yang memproses semua subpersoalan dan menggabung semua solusi setiap sub-persoalan.
•
Decrease and conquer terdiri dari dua tahapan:
1. Decrease: mereduksi persoalan menjadi beberapa persoalan yang lebih kecil (biasanya
dua sub-persoalan).
2. Conquer: memproses satu sub-persoalan secara rekursif. Tidak ada tahap combine
dalam decrease and conquer.
•
Tiga varian decrease and conquer:
1. Decrease by a constant: ukuran instans persoalan direduksi sebesar konstanta yang
sama setiap iterasi algoritma. Biasanya konstanta = 1.
2. Decrease by a constant factor: ukuran instans persoalan direduksi sebesar faktor
konstanta yang sama setiap iterasi algoritma. Biasanya faktor konstanta = 2.
3. Decrease by a variable size: ukuran instans persoalan direduksi bervariasi pada setiap
iterasi algoritma.
Algoritma decrease and conquer:
1. Bagi himpunan koin menjadi dua sub-himpunan, masing-masing [n/2] koin. Jika n
ganjil, maka satu buah koin tidak dimasukkan ke dalam kedua sub-himpunan.
2. Timbang kedua sub-himpunan dengan neraca.
3. Jika beratnya sama, berarti satu koin yang tersisa adalah palsu.
4. Jika beratnya tidak sama, maka ulangi proses untuk sub-himpunan yang beratnya
lebih ringan (salah satu koin di dalamnya palsu).
Ukuran persoalan selalu berkurang dengan faktor setengah dari ukuran semula. Hanyasetengah bagian
yang diproses, setengah bagian yang lain tidak diproses.

Jumlah penimbangan yang dilakukan adalah:
0
,n=1
1+T(n/2)
,n>1
T(n) =

Penyelesaian relasi rekurens T(n) mirip seperti binary search:
T(n) = 1 + T(n/2) = …. + O(2log n)
BAB 3
IMPLEMENTASI PROGAM
3.1 Implementasi Program Pada Binary Tree
Binary Tree dapat dibuat dengan menggunakan linked list secara rekursif dan
linked list yang digunakan adalah double linked list non circular. Dimana, data yang
pertama kali masuk akan menjadi node root.
Data yang lebih kecil dari data node root akan masuk dan menempati node kiri dari
node root, sedangkan jika lebih besar dari data node root, akan masuk dan menempati
node di sebelah kanan node root.
Contoh program seederhana dalam binary tree :
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
struct node
{
int data;
node *left;
node *right;
};
node *tree=NULL;
node *insert(node *tree,int ele);
void preorder(node *tree);
void inorder(node *tree);
void postorder(node *tree);
int count=1;
void main()
{
clrscr();
int ch,ele;
do
{
clrscr();
cout<<"\n\t\a\a1----INSERT A NODE IN A BINARY TREE.\a\a";
cout<<"\n\t\a\a2----PRE-ORDER TRAVERSAL.\a\a";
cout<<"\n\t\a\a3----IN-ORDER TRAVERSAL.\a\a";
cout<<"\n\t\a\a4----POST-ORDER TRAVERSAL.\a\a";
cout<<"\n\t\a\a5----EXIT.\a\a";
cout<<"\n\t\a\aENTER CHOICE::\a\a";
cin>>ch;
switch(ch)
{
case 1:
cout<<"\n\t\a\aENTER THE ELEMENT::\a\a";
cin>>ele;
tree=insert(tree,ele);
break;
case 2:
cout<<"\n\t\a\a****PRE-ORDER TRAVERSAL OF A TREE****\a\a";
preorder(tree);
break;
case 3:
cout<<"\n\t\a\a****IN-ORDER TRAVERSAL OF A TREE****\a\a";
inorder(tree);
break;
case 4:
cout<<"\n\t\a\a****POST-ORDER TRAVERSAL OF A TREE****\a\a";
postorder(tree);
break;
case 5:
exit(0);
}
}while(ch!=5);
}
node *insert(node *tree,int ele)
{
if(tree==NULL)
{
tree=new node;
tree->left=tree->right=NULL;
tree->data=ele;
count++;
}
else
if(count%2==0)
tree->left=insert(tree->left,ele);
else
tree->right=insert(tree->right,ele);
return(tree);
}
void preorder(node *tree)
{
if(tree!=NULL)
{
cout<<tree->data;
preorder(tree->left);
preorder(tree->right);
getch();
}
}
void inorder(node *tree)
{
if(tree!=NULL)
{
inorder(tree->left);
cout<<tree->data;
inorder(tree->right);
getch();
}
}
void postorder(node *tree)
{
if(tree!=NULL)
{
postorder(tree->left);
postorder(tree->right);
cout<<tree->data;
getch();
}
}
BAB 4
PENUTUP
4.1 Kesimpulan
Dari uraian pada pembahasan yang disajikan, maka dapat ditarik sebuah
kesimpulan bahwa :
1. Binary Tree adalah Suatu tree dengan syarat bahwa tiap node (simpul) hanya
boleh memiliki maksimal dua subtree dan kedua subtree tersebut harus terpisah.
Tiap node dalam binary tree hanya boleh memiliki paling banyak dua child (anak
simpul), Secara khusus anaknya dinamakan kiri dan kanan.
2. Terdapat tiga jenis binary tree diantaranya pertama adalah Full Binary Tree yaitu
semua node atau simpul (kecuali leaf) pasti memiliki 2 anak dan tiap subtree
memiliki panjang path yag sama,kedua adalah Complete Binary Tree yaitu pada
dasarnya mirip dengan full binary tree, tapi tiap subtree boleh memiliki panjang
path yang berbeda dan tiap node ((kecuali left ) memiliki 2 anak. Dan yang ketiga
adalah Skewed Binary Tree yaitu binary tree yang semua nodenya (kecuali leaf)
hanya memiliki satu anak.
3. Terdapat beberapa operator-operator yang bekerja dalam binary tree yaitu
search,delete,insert,transverse,create,clear dan masih banyak yang lainnya.
4. Implementasi program yaitu dapat dibuat dengan menggunakan linked list secara
rekursif dan linked list yang digunakan adalah double linked list non circular.
Download