thatubuhaya.files.wordpress.com€¦  · Web viewFAKULTAS DAKWAH DAN KOMUNIKASI. UIN RADEN FATAH...

45
TREE BINARY TREE TRAVERSAL, BALANCING BINARY SEARCH TREE, BOUND BALANDCE TREE DISUSUN OLEH : KELOMPOK 4 1. Septi Rizky A R (13540141) 2. Seri Gustina (13540142) 3. Silvia Dewi Sabrina () 4. Sulaiman (13540150) 5. Tatu Buhaya (13540153) 6. Vidia Rahmadhani (13540156) DOSEN PEMBIMBING : JURUSAN SISTEM INFORMASI

Transcript of thatubuhaya.files.wordpress.com€¦  · Web viewFAKULTAS DAKWAH DAN KOMUNIKASI. UIN RADEN FATAH...

Page 1: thatubuhaya.files.wordpress.com€¦  · Web viewFAKULTAS DAKWAH DAN KOMUNIKASI. UIN RADEN FATAH PALEMBANG. TAHUN 2014. KATA PENGANTAR. Puji Syukur kami panjatkan kehadirat Allah

TREE

BINARY TREE TRAVERSAL, BALANCING BINARY SEARCH TREE, BOUND BALANDCE TREE

DISUSUN OLEH : KELOMPOK 4

1. Septi Rizky A R (13540141)2. Seri Gustina (13540142)3. Silvia Dewi Sabrina ()4. Sulaiman (13540150)5. Tatu Buhaya (13540153)6. Vidia Rahmadhani (13540156)

DOSEN PEMBIMBING :

JURUSAN SISTEM INFORMASI

FAKULTAS DAKWAH DAN KOMUNIKASI

UIN RADEN FATAH PALEMBANG

TAHUN 2014

Page 2: thatubuhaya.files.wordpress.com€¦  · Web viewFAKULTAS DAKWAH DAN KOMUNIKASI. UIN RADEN FATAH PALEMBANG. TAHUN 2014. KATA PENGANTAR. Puji Syukur kami panjatkan kehadirat Allah

KATA PENGANTAR

Puji  Syukur kami panjatkan kehadirat Allah SWT karena berkat limpahan rahmat

dariNya kami selaku Kelompok 4 dapat menyelesaikan makalah ini tepat pada waktunya,

walaupun dalam keadaan yang sangat sederhana. Makalah ini berisikan tidak lanjut dari

materi pembelajaran kita Pada Tree dan Tree Biner. Dengan segala keterbatasan yang kami

miliki kami sajikan makalah ini dalam bentuk yang sangat sederhana maka dari itu kami

selaku panyaji meminta maaf yang sebesar-besarnya jika makalah ini masih begitu banyak

kekurangan, baik itu yang kami sengaja ataupun tidak sengaja karena ini semua masih

dalam proses pembelajaran kami yang tentunya tak lepas dari kodrad kami sebagai manusia

biasa yang tak akan pernah luput dari kesalahan dan tentunya makalah ini masih sangat jauh

dari sempurna. Semoga makalah ini dapat bermanfaat untuk memberikan wawasan kepada

kalian semua bagi para pembaca. Untuk itu kepada dosen kami untuk meminta masukan,

kritikan atau saran yang membangun untuk melengkapi kekurangan yang ada di makalah ini.

Atas perhatiannya kami selaku Kelompok 4 mengucapkan terima kasih.

Palembang , Desember 2014

Page 3: thatubuhaya.files.wordpress.com€¦  · Web viewFAKULTAS DAKWAH DAN KOMUNIKASI. UIN RADEN FATAH PALEMBANG. TAHUN 2014. KATA PENGANTAR. Puji Syukur kami panjatkan kehadirat Allah

BAB I

PENDAHULUAN

1.1. Latar belakang

Pohon(tree) adalah salah satu jenis graf yang tidak memiliki lintasan atau sirkuit.

Pohon biasanya memiliki hanya satu simpul orangtua dan simpul anak yang bisa nol atau

lebih dari nol. Pada pohon juga terdapat yang disebut pohon berakar yaitu pohon yang

satu buah simpulnya dijadikan sebuah akar lalu anak dari akar tersebut akan memiliki

simpul anak dan simpul anak tersebut akan terus memiliki anak sehingga akan ada simpul

yang tidak memiliki anak yang disebut simpul daun.

Gambar 1-1. Gambar Pohon Berakar

Dalam gambar pohon berakar di atas(Gambar 1-1). Dapat dilihat beberapa terminologi:

A adalah akar dari pohon tersebut

B dan C adalah anak dari A

B adalah orangtua dari D dan E

C,D dan E adalah daun dari pohon

A,B,C,D,E adalah simpul dari pohon

D dan E adalah cucu dari A

Tinggi pohon tersebut adalah 2(akar tidak dihitung)

Dan berlaku hubungan lainya seperti pohon keluarga

Dalam pohon terdapat berbagai jenis pohon, antara lain adalah pohon biner, dan pohon

pencarian biner.

A

D

B D

E

Page 4: thatubuhaya.files.wordpress.com€¦  · Web viewFAKULTAS DAKWAH DAN KOMUNIKASI. UIN RADEN FATAH PALEMBANG. TAHUN 2014. KATA PENGANTAR. Puji Syukur kami panjatkan kehadirat Allah

1.2. Tujuan

a. Memahami tentang Tree

b. Mengetahui istilah-istilah dalam Tree

c. Memahami pengertian dari Binary Tree

d. Mengetahui jenis-jenis Binary Tree

e. Memahami transversal

f. Memahami tentang Balancing binary search tree serta contohnya

g. Memahami tentang Bound Balance serta contohnya

Page 5: thatubuhaya.files.wordpress.com€¦  · Web viewFAKULTAS DAKWAH DAN KOMUNIKASI. UIN RADEN FATAH PALEMBANG. TAHUN 2014. KATA PENGANTAR. Puji Syukur kami panjatkan kehadirat Allah

BAB II

PEMBAHASAN

2.1. Pengertian TreeTree merupakan salah satu bentuk struktur data tidak linear yang menggambarkan

hubungan yang bersifat hierarkis (hubungan one to many) antara elemen-elemen. Tree bias

didefinisikan sebagai kumpulan simpul/node dengan elemen khusus yang disebut Root.

Notde lainnya terbagi menjadi himpunan-himpunan yang saling tak berhubungan satu sama

lain (disebut Subtree).

Deklarasi Pohon

Jika kita memperhatikan setiap simpul dalam pohon biner, kita bisa menyusun

struktur data yang tepat dari simpul-simpul tersebut. Kita dapat melihat bahwa dalam  setiap

simpul selalu berisi dua buah pointer untuk menunjuk ke cabang kiri dan cabang  kanan,

dan informasi yang akan disimpan dalamsimpul tersebut. Dengan memperhatikan hal ini,

simpul dalam pohon biner disajikan sebagai berikut:

KIRI INFO KANAN

Gambar 7.1

Sesuai dengan gambar 7.1, maka deklarasi list yang sesuai adalah:

typedef char TypeInfo;

typedef struct Simpul *Tree;

struct Simpul {

TypeInfo Info;

tree Kiri, /* cabang kiri */

Page 6: thatubuhaya.files.wordpress.com€¦  · Web viewFAKULTAS DAKWAH DAN KOMUNIKASI. UIN RADEN FATAH PALEMBANG. TAHUN 2014. KATA PENGANTAR. Puji Syukur kami panjatkan kehadirat Allah

Kanan; /* cabang kanan */

};

Untuk lebih jelasnya, di bawah akan diuraikan istilah-istilah umum dalam tree.

a. Predecessor : Node yang berada di atas node tertentu

b. Successor : Node yang berada dibawah node tertentu

c. Ancestor : Seluruh node yang terletak sebelum node tertentu dan terletak pada jalur

yang sama

d. Descendant Seluruh node yang terletak sebelum node tertentu dan terletak pada jalur

yang sama

e. Parent Predecessor satu level di atas suatu node

f. Child Successor satu level di bawah suatu node

g. Sibling Node-node yang memiliki parent yang sama dengan suatu node

h. Subtree Bagian dari tree yang berupa suatu node beserta descendantnya dan memiliki

semua karakteristik dari tree tersebut.

i. Size Banyaknya node dalam suatu tree

j. Height Banyaknya tingkatan / level dalam suatu tree

k. Root Satu-satunya node khusus dalam tree yang tak punya predecessor

l. Leaf Node-node dalam tree yang tak memiliki successor

m. Degree Banyaknya child yang dimiliki suatu node

2.2. Jenis-Jenis Tree

1. Binary Tree

Binary Tree adalah tree dengan syarat bahwa tiap node hanya boleh memiliki

maksimal dua subtree dan kedua subtree tersebut harus terpisah. Sesuai dengan definisi

tersebut tiap node dalam binary tree hanya boleh memiliki paling banyak dua child.

Jenis- Jenis Binary Tree :

a. Full Binary Tree

Jenis binary tree ini tiap nodenya (kecuali leaf) memiliki dua child dan tiap

subtree harus mempunyai panjang path yang sama.

b. Complete Binary Tree

Page 7: thatubuhaya.files.wordpress.com€¦  · Web viewFAKULTAS DAKWAH DAN KOMUNIKASI. UIN RADEN FATAH PALEMBANG. TAHUN 2014. KATA PENGANTAR. Puji Syukur kami panjatkan kehadirat Allah

Jenis ini mirip dengan Full Binary Tree, namun tiap subtree boleh memiliki

panjang path yang berbeda dan setiap node kecuali leaf hanya boleh memiliki 2 child.

c. Skewed Binary Tree

Skewed Binary Tree adalah Binary Tree yang semua nodenya (kecuali leaf)

hanya memiliki satu child.

1.1. Implementasi Binary Tree

Binary tree dapat diimplementasikan dalam C++ dengan menggunakan double

linkedlist.

1.2. Operasi-Operasi pada Binary Tree

Create : Membentuk binary tree baru yang masih kosong

Clear : Mengosongkan binary tree yang sudah ada

Empty : Function untuk memeriksa apakah binary tree masih kosong

Insert : Memasukkan sebuah node ke dalam tree. Ada tiga pilihan insert :

sebagai root, left child, atau right child. Khusus insert sebagai root, tree

harus dalam keadaan kosong

Find : Mencari root, parent, left child, atau right child dari suatu node. (tree

tidak boleh kosong).

Update : Mengubah isi dari node yang ditunjuk oleh pointer curret (Tree tidak

boleh kosong)

Retrieve : Mengetahui isi dari node yang ditunjuk oleh pointer current (Tree

tidak boleh kosong)

Delete Sub : Menghapus sebuah subtree (node beserta seluruh descendantnya)

yang ditunjuk current. Tree tidak boleh kosong. Setelah itu, pointer

current dakan berpindah ke parent dari node yang dihapus.

Characteristic : Mengetahui karakteristik dari suatu tree, yakni: size, height, serta

average length. Tree tidak boleh kosong.

Traverse : Mengunjungi seluruh node-node pada tree, masing-masing sekali.

Hasilnya adalah urutan informasi secara linear yang tersimpan dalam

tree. Ada tiga cara traverse,yaitu PreOrder, InOrder, dan PostOrder.

Langkah-langkah Tranverse :

PreOrder : cetak isi node yang dikunjungi, kunjungi Left Child, kunjungi Right Child

InOrder : kunjungi Left Child, cetak isi node yang dikunjungi, kunjungi Right Child

PostOrder : kunjungi Left Child, kunjungi Right Child cetak isi node yang dikunjungi.

Page 8: thatubuhaya.files.wordpress.com€¦  · Web viewFAKULTAS DAKWAH DAN KOMUNIKASI. UIN RADEN FATAH PALEMBANG. TAHUN 2014. KATA PENGANTAR. Puji Syukur kami panjatkan kehadirat Allah

2. Binary Search Tree

Binary Tree ini memiliki sifat dimana semua left child harus lebih kecil dari

pada right child dan parentnya. Semua right child juga harus lebih besar dari left child

serta parentnya.

Binary search tree dibuat untuk mengatasi kelemahan pada binary tree biasa,

yaitu kesulitan dalam searching / pendarian node tertentu dalam binary tree. Pada

dasarnya operasi dalam Binary Search Tree sama dengan Binary Tree biasa, kecuali

pada operasi insert, update, dan delete.

Insert

Pada Binary Search Tree insert dilakukan setelah lokasi yang tepat ditemukan

(lokasi tidak ditentukan oleh user sendiri ).

Update

Update ini seperti yang ada pada Binary Tree biasa, namun di sini update akan

berpengaruh pada posisi node tersebut selanjutnya. Bila update mengakibatkan tree

tersebut bukan Binary Search Tree lagi, harus dilakukan perubahan pada tree dengan

melakukan rotasi supaya tetap menjadi Binary Search Tree.

Delete

Seperti halnya update, delete dalam Binary Search Tree juga turut mempengaruhi

struktur dari tree tersebut.

AVL Tree

AVL Tree adalah Binary Search Tree yang memiliki perbedaan tinggi/ level

maksimal 1 antara subtree kiri dan subtree kanan. AVL Tree muncul untuk

menyeimbangkan Binary Search Tree. Dengan AVL Tree, waktu pencarian dan bentuk

tree dapat dipersingkat dan disederhanakan. Selain AVL Tree, terdapat pula Height

Balanced n Tree, yakni Binary Search Tree yang memiliki perbedaan level antara

subtree kiri dan subtree kanan maksimal adalah n sehingga dengan kata lain AVL Tree

adalah Height Balanced 1 Tree. Untuk memudahkan dalam menyeimbangkan tree,

digunakan simbol-simbol Bantu :

Page 9: thatubuhaya.files.wordpress.com€¦  · Web viewFAKULTAS DAKWAH DAN KOMUNIKASI. UIN RADEN FATAH PALEMBANG. TAHUN 2014. KATA PENGANTAR. Puji Syukur kami panjatkan kehadirat Allah

-- (tanda minus) : digunakan apabila Subtree kiri lebih panjang dari Subtree kanan.

+ (tanda plus) : digunakan apabila Subtree kanan lebih panjang dari Subtree kiri.

0 (nol) : digunakan apabila Subtree kiri dan Subtree kanan mempunyai height

yang sama.

Daftar Istilah-Istilah

Algoritma : Langkah-langkah menyelesaikan suatu masalah yang disusun

secara logis dan berurutan

Animasi : Gambar yang tampak bergerak, terdiri dari banyak gambar-gambar

tunggal (disebut frame) yang ditampilkan satu per satu secara bergantian dengan

cepat sehingga objek dalam gambar tampak seolah-olah bergerak.

Array : Struktur data yang memiliki banyak elemen di dalamnya, dengan

masing-masing elemen memiliki tipe data yang sama.

Clear : Menghapus secara keseluruhan, biasanya digunakan sebagai nama

fungsi/metode yang bertujuan untuk mengosongkan list atau menghapus

keseluruhan elemen.

Console : Istilah dalam komputer yang menunjuk pada antarmuka antara

pemakai dengan komputer yang berbasiskan teks. Cara kerja konsol sangat

sederhana yaitu menggunakan standar input untuk membaca input dari keyboard

dan standar output untuk menampilkan teks ke layer monitor.

Data : Informasi yang disimpan komputer, dapat berbentuk teks, gambar, suara,

video, dan sebagainya.

Delete : Menghapus sebuah elemen, biasanya digunakan sebagai nama

fungsi/metode yang bertujuan untuk menghapus sebuah elemen dalam suatu

list/tree

Deret geometric : Deretan bilangan yang setiap bilangan merupakan hasil kali

bilangan sebelumnya dengan suatu konstanta.

Destruktor : Metode khusus dalam sebuah kelas untuk menghapus objek hasil

instansiasi kelas tersebut

Dimensi : Jumlah indek yang diperlukan untuk menyatakan sebuah elemen

dalam array

Page 10: thatubuhaya.files.wordpress.com€¦  · Web viewFAKULTAS DAKWAH DAN KOMUNIKASI. UIN RADEN FATAH PALEMBANG. TAHUN 2014. KATA PENGANTAR. Puji Syukur kami panjatkan kehadirat Allah

Elemen : Sebuah data tunggal yang paling kecil dari sebuah array atau list. Data

tunggal disini tidak perlu data sederhana, melainkan bisa berupa kumpulan data

atau list yang lain.

Empty : Keadaan di mana list ada dalam keadaan kosong

Fibonacci : Barisan bilangan yang setiap bilangan merupakan jumlah dari dua

bilangan sebelumnya.

Field : Data yang dimiliki oleh sebuah objek

FIFO : First In First Out sifat suatu kumpulan data. jika sebuah elemen A

dimasukkan lebih dulu dari B maka A harus dikeluarkan dulu dari B

FPB : Faktor Persekutuan terbesar, faktor yang paling besar jika sejumlah

bilangan memiliki beberapa faktor yang sama.

Full : Keadaan di mana list penuh, tidak boleh menerima data lagi

Fungsi : Suatu modul atau bagian program yang mengerjakan suatu program

tertentu.

Himpunan : Kumpulan dari objek-objek, misalnya sebuah himpunan dari buah-

buahan dapat terdiri dari pisang, mangga, jambu dll.

Indeks : Bilangan yang digunakan untuk menyatakan posisi suatu elemen dalam

array atau list.

Input : Data masukkan, dalam fungsi berarti parameter yang dimasukkan,

sedangkan dalam program secara keseluruhan berarti data yang dimasukkan

pemakai, bias melalui parameter program, file maupun lewat keyboard

Insert : Memasukkan sebuah elemen baru ke dalam list. Biasanya insert

dilakukan baik di tengah-tengah list, awal, maupun di akhir list.

Iterasi : Perulangan dengan struktur perulangan, while, do while, maupun for.

Kelas : Suatu struktur yang digunakan sebagai template bagi objek-objek yang

sama sifatnya.

Kompilasi : Proses menerjemahkan bahasa sumber (source code) ke dalam

bahasa lain, biasanya bahasa mesin, untuk dapat dijalankan langsung oleh

computer melalui system operasi.

Kompiler : Program yang mengerjakan kompilasi.

Konstruktor : Metode khusus yang dimiliki suatu kelas untuk membentuk

suatu objek baru berdasarkan kelas tersebut

Library : Kumpulan fungsi, makro, template, dan kelas yang disediakan

bersama compiler C++.

Page 11: thatubuhaya.files.wordpress.com€¦  · Web viewFAKULTAS DAKWAH DAN KOMUNIKASI. UIN RADEN FATAH PALEMBANG. TAHUN 2014. KATA PENGANTAR. Puji Syukur kami panjatkan kehadirat Allah

LIFO : Last In Fisrt Out, sifat kumpulan data, kebalikan dari FIFO

Linked List : List yang didesain dengan cara mendefinisikan sebuah elemen

yang memiliki hubungan atau link dengan elemen lain yang dihubungkan

dengan elemen yang lain lagi.

Matriks : Dalam matematika berarti kumpulan bilangan yang disusun dalam

bentuk kolom dan baris.

Metode : Fungsi yang dimiliki suatu objek

Objek : Struktur data yang terdiri dari data yang lebih sederhana yang disebut

field yang memiliki operasi sendiri untuk menangani data-data yang

dimilikinya.

Output : Data yang dihasilkan oleh program

Pointer : Type data khusus yang pada umumnya berukuran 32 bit yang

berfungsi untuk menampung bilangan tertentu yang menunjuk pada lokasi

memory tertentu

Pop : Mengeluarkan satu elemen dari dalam list dengan cara menyalin data

elemen tersebut, kemudian menghapus elemen tersebut dari list biasanya

digunakan untuk stack.

Prima : Bilangan yang tidak memiliki faktor selain 1 dan bilangan itu sendiri.

Push : Memasukkan sebuah elemen baru ke dalam list.

Queue : Struktur list dengan sifat FIFO, cara kerjanya seperti antrian manusia.

Record : Struktur data yang terdiri dari satu atau lebih elemen yang tipe data

bias berbeda.

Rekursi : Jenis perulangan yang tidak menggunakan struktur perulangan, tetapi

dengan memanggil fungsi yang bersangkutan.

Sort : Menyusun elemen-elemen suatu list secara berurutan.

Source Code : Program yang ditulis menggunakan bahasa pemrograman

tertentu. Kode sumber belum dapat dijalankan oleh komputer dan perlu

menjalani proses kompilasi sehingga dapat dijalankan.

Stack : List yang memiliki sifar LIFO. Data yang hendak di keluarkan dari stack

haruslah data yang paling terakhir dari stack.

STL : Standar Templete Library merupakan kumpulan yang disertakan dalam

setiap compiler C++ yang memenuhi standar ANSI C++ yang menyediakan

berbagai struktur data, algoritma dan template yang sering dipakai.

Page 12: thatubuhaya.files.wordpress.com€¦  · Web viewFAKULTAS DAKWAH DAN KOMUNIKASI. UIN RADEN FATAH PALEMBANG. TAHUN 2014. KATA PENGANTAR. Puji Syukur kami panjatkan kehadirat Allah

Stream : Aliran merupakan konsep dalam C++ untuk input dan ouput data tanpa

memperdulikan isi data maupun media penampung data tersebut.

Struktur kontrol : Struktur yang digunakan untuk mengontrol jalannya

program.

Teks : Data yang terdiri dari karakter-karakter yang dapat dibaca (huruf

bilangan, tanda baca).

Tree : Suatu struktur data yang setiap elemen terhubung sedemikian rupa

sehingga berbentuk seperti pohon.

Contoh Program:

#include<stdio.h>

typedef struct node{

char data;

node *kiri;

node *kanan;

};

node *akar=NULL;

addNode(node **akar, char isi) {

if((*akar)==NULL){

node *baru;

baru= new node;

baru->data = isi;

baru->kiri = NULL;

baru->kanan = NULL;

(*akar)=baru;

}

}

preOrder(node *akar) {

if(akar !=NULL) {

printf("%c ", akar->data);

preOrder(akar->kiri);

preOrder(akar->kanan);

}

Page 13: thatubuhaya.files.wordpress.com€¦  · Web viewFAKULTAS DAKWAH DAN KOMUNIKASI. UIN RADEN FATAH PALEMBANG. TAHUN 2014. KATA PENGANTAR. Puji Syukur kami panjatkan kehadirat Allah

}

inOrder(node *akar) {

if(akar !=NULL) {

inOrder(akar->kiri);

printf("%c ", akar->data);

inOrder(akar->kanan);

}

}

postOrder(node *akar) {

if(akar !=NULL) {

postOrder(akar->kiri);

postOrder(akar->kanan);

printf("%c ", akar->data);

}

}

main(){

char abjad;

printf("\n\n\tPosisi Awal Tree:\n\n");

printf("\t B\n\t / \\\n\t U H\n\t /\n\t A\n\t / \\\n\t Y A\n\n");

addNode(&akar,abjad='B');

addNode(&akar->kiri,abjad='U');

addNode(&akar->kanan,abjad='H');

addNode(&akar->kiri->kiri,abjad='A');

addNode(&akar->kiri->kiri->kiri,abjad='Y');

addNode(&akar->kiri->kiri->kanan,abjad='A');

printf("Tampilan PreOrder : ");

preOrder(akar);

printf("\nTampilan InOrder : ");

inOrder(akar);

printf("\nTampilan PostOrder : ");

postOrder(akar);

}

Page 14: thatubuhaya.files.wordpress.com€¦  · Web viewFAKULTAS DAKWAH DAN KOMUNIKASI. UIN RADEN FATAH PALEMBANG. TAHUN 2014. KATA PENGANTAR. Puji Syukur kami panjatkan kehadirat Allah

Hasil output :

2.3. Pengertian Binary Transversal

Traversal

Traversal adalah proses kunjungan dalam pohon, dengan setiap node hanya

dikunjungi tepat satu kali.

Jadi, binary tree traversal adalah proses mengunjungi node tepat satu kali dan tiap

node hanya boleh memiliki maksimal 2 subtree yang disebut sebagai sub pohon kiri

(left subtree) dan sub pohon kanan (right subtree).

Dengan melakukan kunjungan secara lengkap, maka akan didapatkan urutan

informasi secara linier yang tersimpan dalam sebuah binary tree.

Binary tranversal Adalah proses menelusuri suatu Binary Tree sehingga

sedemikian rupa setiap vertex dikunjungi hanya 1 kali.

3 aktivitas dalam Binary tree Transversal :

Page 15: thatubuhaya.files.wordpress.com€¦  · Web viewFAKULTAS DAKWAH DAN KOMUNIKASI. UIN RADEN FATAH PALEMBANG. TAHUN 2014. KATA PENGANTAR. Puji Syukur kami panjatkan kehadirat Allah

a. Visit the Root

b. Transverse the left subtree

c. Transverse the right subtree

Algoritma dalam Binary Tree Transversal :

1. PRE-ORDER TRANSVERSAL

a. visit the root

b. tranverse the left subtree

c. tranverse the right subtree

contoh : { PreOrder }

procedure PreOrder(Tree : NodePtr);

begin

if Tree<>nil then

begin

write(Tree^.value);

PreOrder(Tree^.left);

PreOrder(Tree^.right);

end;

end;

2. IN-ORDER TRANSVERSAL

a. tranverse the left subtree

b. visit the root

c. tranverse the right subtree

contoh :{ InOrder }

procedure InOrder(Tree : NodePtr);

begin

if Tree<>nil then

begin

Page 16: thatubuhaya.files.wordpress.com€¦  · Web viewFAKULTAS DAKWAH DAN KOMUNIKASI. UIN RADEN FATAH PALEMBANG. TAHUN 2014. KATA PENGANTAR. Puji Syukur kami panjatkan kehadirat Allah

InOrder(Tree^.left);

write(Tree^.value);

InOrder(Tree^.right);

end;

end;

3. POST-ORDER TRANSVERSAL

a. tranverse the left subtree

b. tranverse the right subtree

c. visit the root

Contoh : { PostOrder }

procedure PostOrder(Tree : NodePtr;

begin

if Tree<>nil then

begin

PostOrder(Tree^.left);

PostOrder(Tree^.right);

write(Tree^.value);

end;

end;

(1)

Page 17: thatubuhaya.files.wordpress.com€¦  · Web viewFAKULTAS DAKWAH DAN KOMUNIKASI. UIN RADEN FATAH PALEMBANG. TAHUN 2014. KATA PENGANTAR. Puji Syukur kami panjatkan kehadirat Allah

PRE-ORDER : V L R (+ + * A B C D)

(2)

IN-ORDER : L V R

A * B + C + D

(3)

POST-ORDER : L R V

A B * C + D +

Contoh program PRE-ORDER , IN-ORDER , POST-ORDER

#include<stdio.h>//header file

#include<conio.h>

Page 18: thatubuhaya.files.wordpress.com€¦  · Web viewFAKULTAS DAKWAH DAN KOMUNIKASI. UIN RADEN FATAH PALEMBANG. TAHUN 2014. KATA PENGANTAR. Puji Syukur kami panjatkan kehadirat Allah

/* Deklarasi struct */

typedef struct Node{

int data; //data pada tree

Node *kiri; //penunjuk node anak kiri

Node *kanan; //penunjuk node anak kanan

};

/* Fungsi untuk memasukkan data ke dalam tree */

void tambah(Node **root, int databaru){

if((*root) == NULL){ //jika pohon/subpohon masih kosong

Node *baru;//node "baru" dibentuk…

baru = new Node;//berdasarkan struct "Node"

baru->data = databaru; //data node baru diisi oleh variabel databaru

baru->kiri = NULL;//penunjuk kiri node baru masih kosong

baru->kanan = NULL;//penunjuk kanan node baru masih kosong

(*root) = baru; //node pohon (root) diletakkan pada node baru

(*root)->kiri = NULL;//penunjuk kiri node root masih kosong

(*root)->kanan = NULL; //penunjuk kanan node root masih kosong

printf("Data bertambah!");

}

else if(databaru < (*root)->data)//jika databaru kurang dari data node root…

tambah(&(*root)->kiri, databaru);//tambahkan databaru pada subpohon kiri

else if(databaru > (*root)->data)//jika databaru lebih dari data node root…

tambah(&(*root)->kanan, databaru); //tambahkan databaru pada subpohon kanan

Page 19: thatubuhaya.files.wordpress.com€¦  · Web viewFAKULTAS DAKWAH DAN KOMUNIKASI. UIN RADEN FATAH PALEMBANG. TAHUN 2014. KATA PENGANTAR. Puji Syukur kami panjatkan kehadirat Allah

else if(databaru == (*root)->data)//jika databaru sama dengan data node root

printf("Data sudah ada!");//databaru tidak dapat ditambahkan pada tree

}

/* Fungsi untuk menampilkan data secara pre-order

(data ditampilkan dari node induk, node anak kiri, lalu node anak kanan)

*/

void preOrder(Node *root){

if(root != NULL){//jika pohon/subpohon tidak kosong

printf("%d ", root->data);//menampilkan data node yang dikunjungi

preOrder(root->kiri);//mengunjungi node anak kiri

preOrder(root->kanan); //mengunjungi node anak kanan

}

}

/* Fungsi untuk menampilkan data secara in-order

(data ditampilkan dari node anak kiri, node induk, lalu node anak kanan)

*/

void inOrder(Node *root){

if(root != NULL){//jika pohon/subpohon tidak kosong…

inOrder(root->kiri);//mengunjungi node anak kiri

printf("%d ", root->data);//menampilkan data node yang dikunjungi

inOrder(root->kanan);//mengunjungi node anak kanan

}

}

Page 20: thatubuhaya.files.wordpress.com€¦  · Web viewFAKULTAS DAKWAH DAN KOMUNIKASI. UIN RADEN FATAH PALEMBANG. TAHUN 2014. KATA PENGANTAR. Puji Syukur kami panjatkan kehadirat Allah

/* Fungsi untuk menampilkan data secara post-order

(data ditampilkan dari node anak kiri, node anak kanan, lalu node induk)

*/

void postOrder(Node *root){

if(root != NULL){//jika pohon/subpohon tidak kosong

postOrder(root->kiri); //mengunjungi node anak kiri

postOrder(root->kanan);//mengunjungi node anak kanan

printf("%d ", root->data); //menampilkan data node yang dikunjungi

}

}

main(){

int pil, c;

Node *pohon, *t;

pohon = NULL;

do{

int data;

printf("MENU\n");

printf("1. Tambah\n");

printf("2. Lihat Pre-Order\n");

printf("3. Lihat In-Order\n");

printf("4. Lihat Post-Order\n");

printf("5. Exit\n");

Page 21: thatubuhaya.files.wordpress.com€¦  · Web viewFAKULTAS DAKWAH DAN KOMUNIKASI. UIN RADEN FATAH PALEMBANG. TAHUN 2014. KATA PENGANTAR. Puji Syukur kami panjatkan kehadirat Allah

printf("Pilihan : "); scanf("%d", &pil);

switch(pil){

case 1 :

printf("Data baru : ");

scanf("%d", &data);

tambah(&pohon, data);

break;

case 2 :

if(pohon != NULL)

preOrder(pohon);

else

printf("Masih kosong!");

break;

case 3 :

if(pohon != NULL)

inOrder(pohon);

else

printf("Masih kosong!");

break;

case 4 :

if(pohon != NULL)

postOrder(pohon);

else

Page 22: thatubuhaya.files.wordpress.com€¦  · Web viewFAKULTAS DAKWAH DAN KOMUNIKASI. UIN RADEN FATAH PALEMBANG. TAHUN 2014. KATA PENGANTAR. Puji Syukur kami panjatkan kehadirat Allah

printf("Masih kosong!");

break;

}

getch();

printf("\n");

}

while(pil != 5);

}

Maka hasil outputnya

Page 23: thatubuhaya.files.wordpress.com€¦  · Web viewFAKULTAS DAKWAH DAN KOMUNIKASI. UIN RADEN FATAH PALEMBANG. TAHUN 2014. KATA PENGANTAR. Puji Syukur kami panjatkan kehadirat Allah

2.4. BALANCING BINARY SEARCH TREE(Self Balancing Binary Tree)

Self Balancing Binary Search Tree adalah pohon pencarian biner yang dapat

menyeimbangkan dirinya sendiri, yaitu meminimalisasikan kedalaman pohon, pada saat

pohon tersebut di tambahkan atau dikurangi simpulnya.

Gambar 2-1. Pohon Pencarian Biner Tak Seimbang

Pada umumnya dalam Self Balancing Binary Search Tree, bentuk pohon yang

seharusnya seperti gambar 2-1, akan secara otomatis diubah menjadi seperti gambar 1-

2. Algoritma penyeimbangan pohon akan berjalan saat dimasukan simpul baru atau saat

sebuah simpul dalam pohon dihapus.

Pada umumnya Self Balancing Binary Search Tree mempunyai tinggi maksimal

sebesar [2log n] dengan n adalah jumlah simpul, hal ini disebabkan oleh pohon pasti

mempunyai ketinggian minimal dan baru akan menambah tinggi saat pohon sudah

mempunyai daun maksimal di suatu ketinggian, hal ini juga menyebabkan sebagian

besar algoritma untuk mengerjakan pohon ini mempunyai kompleksitas sebesar O(log

n).

Self Balancing Binary Search Tree sangat berguna untuk mempercepat kinerja

sebuah pohon pencarian biner, selain itu pohon ini juga mempunyai beberapa aplikasi

untuk mempermudah kinerja suatu algoritma seperti antrian dengan prioritas dan tabel

data.

Self Balancing Binary Search Tree mempunyai beberapa contoh pohon yaitu:

1. AA tree

2. AVL tree

3. Red-black tree

4. Scapegoat tree

5. Treap

4

3

1

5

2

Page 24: thatubuhaya.files.wordpress.com€¦  · Web viewFAKULTAS DAKWAH DAN KOMUNIKASI. UIN RADEN FATAH PALEMBANG. TAHUN 2014. KATA PENGANTAR. Puji Syukur kami panjatkan kehadirat Allah

2.4.1. JENIS-JENIS SELF BALANCING BINARY SEARCH TREE

A. Red-black Tree

Red-black Tree adalah salah satu jenis Self Balancing Binary Search Tree

yang diciptakan oleh Rudolf Bayer di tahun 1972 dan bernama Symmetric binary

B-tree, lalu pada tahun 1978 diperbaharui menjadi Red-black Tree oleh Leonidas J.

Guibas dan Robert Sedgewick.

Dalam Red-black Tree ini pohon, simpul ditambahkan dan dihapus dengan

algoritma khusus sehingga pohon tidak perlu menyeimbangkan dirinya.

Selain kriteria pohon pencarian biner biasa, ada beberapa kriteria tambahan berlaku

untuk Red-Black Tree:

1. Simpul bewarna merah atau hitam.

2. Akar berwarna hitam. (Aturan ini dapat dihilangkan karena akar dapat diubah

ke merah dan tidak mempengaruhi.)

3. Anak dari tiap simpul merah adalah hita

4. Setiap jalur dari akar sampai simpul sampai daun keturunannya mempunyai

jumlah simpul hitam yang sama.

Gambar 3-1. Contoh Red-black Tree

11

2

1 7

1444

5 8

15

Page 25: thatubuhaya.files.wordpress.com€¦  · Web viewFAKULTAS DAKWAH DAN KOMUNIKASI. UIN RADEN FATAH PALEMBANG. TAHUN 2014. KATA PENGANTAR. Puji Syukur kami panjatkan kehadirat Allah

Pada pohon ini algoritma menambahkan dan mengurangkan bergantung pada

kasus dan beberapa diantaranya menggunakan rotasi pohon seperti pada gambar 3-2.

Gambar 3-2. Rotasi sebuah pohon biner

Sumber: http://www.cs.auckland.ac.nz/~jmor159/PLDS210/red_bl ack.html

Pohon ini menambahkan dan mengurangkan dengan cara melihat dimana

simpul baru akan ditambahkan dan tergantung dimana simpul tersebut ditambahkan

akan ada algoritma tersendiri.

Contoh beberapa kasus :

1) Simpul baru menjadi akar.

2) Simpul orangtua bewarna hitam.

3) Simpul orangtua bewarna merah.

B. AVL Tree

AVL Tree adalah salah satu jenis Self Balancing Binary Search Tree yang

ditemukan oleh G.M. Adelson-Velskii and E.M. Landis pada tahun 1962. Di pohon

ini terdapat balance factor yaitu nilai ketinggian anak pohon dikiri kurang

ketinggian anak pohon kanan. Dan pohon dianggap seimbang bila balance factor

bernilai -1,0, atau 1.

Dalam AVL Tree penambahan dan pengurangan dilakukan sama seperti

pohon pencarian biner biasa, hanya saja setelah penambahan atau pengurangan

tersebut akan ditambahkan prosedur rotasi pohon untuk menyeimbangkan.

Dalam penambahan atau pengurangan, pertama akan di cek balance factor

apakah -2 atau +2. Lalu setelah itu akan dicek kembali balance factor dari kedua

sub-pohon dari pohon utama. Lalu akan dilakukan rotasi sesuai kebutuhan.

Page 26: thatubuhaya.files.wordpress.com€¦  · Web viewFAKULTAS DAKWAH DAN KOMUNIKASI. UIN RADEN FATAH PALEMBANG. TAHUN 2014. KATA PENGANTAR. Puji Syukur kami panjatkan kehadirat Allah

Gambar 3-3. Diagram algoritma AVL Tree

Sumber: http://en.wikipedia.org/wiki/AVL_tree

Dapat dilihat pada gambar 3-3 pohon berputar sesuai dengan kedaan pohon

tersebut dan pada akhirnya pohon menjadi seimbang.

C. AA Tree

AA Tree adalah salah satu jenis Self Balancing Binary Search Tree yang

ditemukan oleh Arne Andersson. Pohon ini merupakan varian dari Red-black Tree.

Dalam pohon ini terdapat beberapa syarat seperti Red-Black Tree. Dalam

persyaratan sebagai pengganti warna digunakan bilangan level simpul.

Beberapa persyaratannya adalah:

1. Level dari daun adalah 1

2. Level dari simpul kiri harus lebih kecil dari simpul orangtua

Page 27: thatubuhaya.files.wordpress.com€¦  · Web viewFAKULTAS DAKWAH DAN KOMUNIKASI. UIN RADEN FATAH PALEMBANG. TAHUN 2014. KATA PENGANTAR. Puji Syukur kami panjatkan kehadirat Allah

3. Level dari simpul kanan bisa lebih kecil atau sama dengan orangtua.

4. Level dari cucu kanan selalu lebih besar dari level kakeknya

5. Simpul yang level-nya lebih besar dari satu harus mempunyai dua anak

Pada saat menambahkan atau mengurangkan pada pohon ini berlaku pengurangan

dan penambahan seperti pohon pencarian biner biasa. Hanya saja untuk

menyeimbangakn akan ditambahkan dua prosedur yaitu Skew dan Split(Gambar 3-4).

Dan karena dua pohon tersebut aka nada keadaan dimana ada simpul horizontal untuk

sementara.

Gambar 3-4. (a) Skema Prosedur Skew. (b) Skema Prosedur Split

Sumber: http://en.wikipedia.org/wiki/AA_tree

Dalam penambahan dan pengurangan akan diadakan pengubahan level agar

pohon sesuai dengan ketentuan yang berlaku.

D. Scapegoat Tree

Scapegoat Tree adalah salah satu jenis Self Balancing Binary Search Tree

yang diciptakan oleh Igal Galperin, Jacob Tepec and Ronald L. Rivest.

Pohon pencarian biner akan dikatan seimbang beratnya jika jumlah simpul di

sub-pohon kanan sama dengan jumlah simpul di pohon kiri. Dan dari ketentuan

tersebut didapat rumus

Page 28: thatubuhaya.files.wordpress.com€¦  · Web viewFAKULTAS DAKWAH DAN KOMUNIKASI. UIN RADEN FATAH PALEMBANG. TAHUN 2014. KATA PENGANTAR. Puji Syukur kami panjatkan kehadirat Allah

size(left) <= α*size(node)

size(right) <= α*size(node)

Dimana size adalah jumlah node dan bila memenuhi rumus tersebut disebut

α-weight-balanced.

Selain itu sebuah pohon yang seimbang beratnya juga harus seimbang

tingginya dan dari sana didapt rumus.

height(tree) <= log1/α(NodeCount) dan bila memenuhi rumus tersebut disebut α-height-balanced.

Dan dalam Scapegoat Tree akan selalu dipastikan pohon akan memenuhi

α-height-balanced walaupun belum dipastikan memenuhi α-weight-balanced.

α disini dapat diubah-ubah sesuai ketentuan, dan pengubahan α

berpengaruh pada kinerja pohon (apakah pohon cepat saat menambahkan atau

menghapus).

Penambahan pada pohon ini dilakukan dengan cara seperti penambahan

pada pohon pencarian biner biasa tetapi dengan penambahan scapegoat dan

perhitungan jumlah dan ketinggian simpul yang akan digunakan untuk

penyeimbangan. Dalam penghapusannya juga akan menggunakan jumlah simpul

untuk memastikan apakah penyeimbangan perlu dilakukan atau tidak.

E. Splay Tree

Scapegoat Tree adalah salah satu jenis Binary Search Tree yang dapat

menjadi Self Balancing Binary Search Tree. diciptakan Daniel Dominic Sleator and

Robert Endre Tarjan tahun 1985. Pohon ini mempunyai ketentuan tambahan yaitu

elemen yang baru saja diakses akan mudah dan cepat diakses lagi.

Semua kejadian yang diatur dalam Splay Tree disebut Splaying. Dalam

Splaying, sebuah simpul akan diatur seperti biasa lalu dilanjutkan dengan rotasi

pohon agar pohon tetap seimbang dan simpul yang mengandung elemen yang

mudah diakses tersebut dipindah menjadi akar.

Setiap kali elemen x diakses, Splay akan membawanya ke akar sehingga

terdapat beberapa dan tahap-tahap tersebut tergantung beberapa factor yaitu:

Apakah x adalah simpul kanan atau kiri dari orangtuanya(simpul p)

Apakah p akar atau bukan

Apakah p adalah simpul kanan atau kiri dari

Page 29: thatubuhaya.files.wordpress.com€¦  · Web viewFAKULTAS DAKWAH DAN KOMUNIKASI. UIN RADEN FATAH PALEMBANG. TAHUN 2014. KATA PENGANTAR. Puji Syukur kami panjatkan kehadirat Allah

listing 1def _put (self, key, val, CurrentNode):

     jika kunci <currentNode.key:

         jika currentNode.hasLeftChild ():

                 self._put (key, val, currentNode.leftChild)

         lain:

                 currentNode.leftChild = TreeNode (key, val, orang tua = CurrentNode)

                 self.updateBalance (currentNode.leftChild)

     lain:

         jika currentNode.hasRightChild ():

                 self._put (key, val, currentNode.rightChild)

         lain:

                 currentNode.rightChild = TreeNode (key, val, orang tua = CurrentNode)

                 self.updateBalance (currentNode.rightChild)

def updateBalance (self, node):

     jika node.balanceFactor> 1 atau node.balanceFactor <-1:

         self.rebalance (node)

         kembali

     jika node.parent = Tidak:

         jika node.isLeftChild ():

                 node.parent.balanceFactor = 1

         Elif node.isRightChild ():

                 node.parent.balanceFactor - = 1

         jika node.parent.balanceFactor = 0:

          self.updateBalance (node.parent)

Metode updateBalance baru di mana sebagian besar pekerjaan dilakukan. Ini

menerapkan prosedur rekursif kita hanya dijelaskan. Metode updateBalance cek

pertama untuk melihat apakah node saat ini tidak seimbang cukup membutuhkan

rebalancing (baris 16). Jika itu terjadi maka rebalancing dilakukan dan tidak ada

update lebih lanjut untuk orang tua diperlukan. Jika node saat ini tidak memerlukan

Page 30: thatubuhaya.files.wordpress.com€¦  · Web viewFAKULTAS DAKWAH DAN KOMUNIKASI. UIN RADEN FATAH PALEMBANG. TAHUN 2014. KATA PENGANTAR. Puji Syukur kami panjatkan kehadirat Allah

rebalancing maka faktor keseimbangan induk disesuaikan. Jika faktor keseimbangan

induk non-nol maka algoritma terus bekerja dengan cara naik pohon ke arah akar

dengan rekursif memanggil updateBalance pada orang tua.

2.5. BOUND BALANCE

Page 31: thatubuhaya.files.wordpress.com€¦  · Web viewFAKULTAS DAKWAH DAN KOMUNIKASI. UIN RADEN FATAH PALEMBANG. TAHUN 2014. KATA PENGANTAR. Puji Syukur kami panjatkan kehadirat Allah

BAB III

PENUTUP

3.1. Kesimpulan

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

Istilah-istilah pada Tree

1). Predecessor

2). Successor

3). Ancestor

4). Descendant

5). Father

6). Son

7). Sibling

8). Subtree

9). Size

10). Height

11). Root

12). Leaf

Page 32: thatubuhaya.files.wordpress.com€¦  · Web viewFAKULTAS DAKWAH DAN KOMUNIKASI. UIN RADEN FATAH PALEMBANG. TAHUN 2014. KATA PENGANTAR. Puji Syukur kami panjatkan kehadirat Allah

13).Degree

Binary Tree adalah tree dengan syarat bahwa tiap node hanya boleh memiliki

maksimal dua sub tree dan kedua subtree tersebut harus terpisah.

Jenis-jenis Binary Tree :

a) Full Binary Tree

b) Complete Binary Tree

c) Skewed Binary Tree

Operasi-operasipada Binary Tree :

Create

Clear

Empty

Insert

Find

Update

Retrieve

Delete Sub

Characteristic

Traverse

Traversal

Traversal adalah proses kunjungan dalam pohon, dengan setiap node hanya

dikunjungi tepat satu kali.

Jadi, binary tree traversal adalah proses mengunjungi node tepat satu kali dan

tiap node hanya boleh memiliki maksimal 2 subtree yang disebut sebagai sub pohon

kiri (left subtree) dan sub pohon kanan (right subtree).

Algoritma dalam Binary Tree Transversal :

Page 33: thatubuhaya.files.wordpress.com€¦  · Web viewFAKULTAS DAKWAH DAN KOMUNIKASI. UIN RADEN FATAH PALEMBANG. TAHUN 2014. KATA PENGANTAR. Puji Syukur kami panjatkan kehadirat Allah

1. Pre-order transversal

2. In-order transversal

3. Post-order transversal

Balancing Binary Search Tree

Self Balancing Binary Search Tree adalah pohon pencarian biner yang dapat

menyeimbangkan dirinya sendiri, yaitu meminimalisasikan kedalaman pohon, pada saat

pohon tersebut di tambahkan atau dikurangi simpulnya.

Page 34: thatubuhaya.files.wordpress.com€¦  · Web viewFAKULTAS DAKWAH DAN KOMUNIKASI. UIN RADEN FATAH PALEMBANG. TAHUN 2014. KATA PENGANTAR. Puji Syukur kami panjatkan kehadirat Allah

DAFTAR PUSTAKA

1. Desphande P.S., O.G. Kakde (2004). C dan Data Structures. Charles RiverMedia, Inc.

Massachusetts

2. Heriyanto, Imam, Budi Raharjo (2003). Pemrograman Borland C++ Builder. Informatika

Bandung.

3. Solichin, Achmad (2003). Pemrograman Bahasa C dengan Turbo C. IlmuKomputer.Com.

4. Lidya, Leoni, rinaldi Munir (2002). Algoritama dan Pemrograman dalam Bahas Pascal

dan C. Informatika Bandung

5. http://en.wikipedia.org/wiki/Tree_%28data_structure%29

Kamis, 28 November 2014

6. https://agungsetiady.wordpress.com/2012/05/27/binary-tree-traversal

Kamis, 28 November 2014

7. http://en.wikipedia.org/wiki/Binary_search_tree

Senin,1 Desember 2014

8. http://en.wikipedia.org/wiki/AVL_tree

Senin,1 Desember 2010

9. http://en.wikipedia.org/wiki/AA_tree

Senin, 1 Desember 2010

10. http://en.wikipedia.org/wiki/Self-balancing_binary_search_tree

Selasa, 2 Desember 2014

11. http://www.cs.auckland.ac.nz/~jmor159/PLDS210/red_bl ack.html

Selasa, 2 Desember 2014