Laporan Praktikum Resmi Pohon Biner - Binary Tree (Cintia Yosfin Samalle_201301041)
description
Transcript of Laporan Praktikum Resmi Pohon Biner - Binary Tree (Cintia Yosfin Samalle_201301041)
-
LAPORAN PRAKTIKUM RESMI
ALGORITMA & STRUKTUR DATA 2
BINARY TREE
Disusun oleh :
Cintia Yosfin Samalle
201301041
Dosen pengampu :
Yosef Murya Kusuma Ardhana.S.T., M.Kom
JURUSAN SISTEM INFORMASI
SEKOLAH TINGGI ILMU KOMPUTER YOS SUDARSO
PURWOKERTO
2014
-
2
BAB I
TEORI DASAR
Pohon Biner (Binary Tree)
Pohon biner adalah sebuah tree yang pada masing-masing simpilnya hanya dapat memiliki maksimum 2 (dua) simpul anak, tidak boleh lebih. Pada pohon biner, umumnya kedua node anak (child) disebut dengan posisinya, yaitu subordinat kiri (left child) dan subordinat kanan (right child).
Stricly Binary Tree adalah pohon biner yang semua nodenya (kecuali simpul leaf) mempunyai lengkap node subordinat kiri dan node subordinat kanan.
Sebuah strictly binary tree bila mempunyai n leaf maka akan mempunyai 2n-1 buah node. Contoh:
Jumlah leaf: 8 Jumlah node: 2*8-1=15
Completely binary tree dengan depth = d adalah pohon biner strictly binary tree dimana semua leaf hanya berada pada level d.
Maka pada completely binary tree berlaku:
Pada level k jumlah node : n = 2^k Untuk tree dengan depth d, maka jumlah node : n = 2^(d+1)-1 Untuk tree dengan depth d, maka jumlah node leaf : n = 2^d Untuk tree dengan depth d, maka jumlah node bukan leaf : n = (2^d)-1 Bila jumlah node seluruh node=n, maka depth tree adalah : d = log2(n+1)-1
Complete binary tree dengan depth = d, memiliki ciri-ciri :
Setiap node yang berada di bawah d-1, memiliki dua subordinat. Jika pada level d-1 subtree kanan ada node yang mempunyai subordinat, maka setiap node
pada level d-1 subtree kiri harus memiliki subordinat kiri dan kanan.
Balanced Binary Tree (pohon biner seimbang) atau biasa disebut dengan pohon AVL adalah pohon biner yang ketinggian subtree kiri dan subtree kanan untuk setiap node superordinat paling banyak memiliki selisih 1.
-
3
Penomoran node pohon biner, untuk melakukan konversi telah disepakati cara penomoran setiap node dalam binary tree sebagai berikut :
Jika sebuah node bernomor n, maka subordinat kiri bernomor 2n dan subordinat kanan bernomor 2n+1.
Node root diberi nomor 1.
Dengan mengetahui dari nomor setiap node maka sebuah binary tree dapat direpresentasikan ke dalam sebuah array satu dimensi. Dengan menggunakan penomoran, maka untuk menyimpan sebuah binary tree dengan depth = d, perlu disiapkan array satu dimensi dengan jumlah elemen minimal sebanyak 2^(d+1)-1 elemen.
-
4
BAB II
PENJELASAN PROGRAM
Pada penjelasan program bab ini akan dijelaskan mengenai bagaimana melakukan
pemrograman C++ dengan menggunakan Tree secara sederhana sesuai dengan modul praktikum.
Program Binary Tree
/* * Tree2.cpp * * Created on: Sep 17, 2014 * Author: ADMIN */ #include #include #include #define Nil NULL using namespace std; 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!=Nil){ n->data=item; n->left=Nil; n->right=Nil; } return n; } void BinaPokok (POKOK **T){ *T=NULL; } typedef enum {FALSE=0, TRUE=1} BOOL; BOOL PokokKosong (POKOK *T){
-
5
return ((BOOL)(T==Nil)); } void TambahNod (NOD **p, char item){ NOD *n; n=NodBaru(item); *p=n; } void preOrder (POKOK *T){ if(!PokokKosong(T)){ coutleft); coutright); coutright, buah='I'); TambahNod(&keluarga->left->right->right, buah='L'); TambahNod(&keluarga->right, buah='O'); TambahNod(&keluarga->right->left, buah='D'); cout
-
6
cout
-
7
9. Tanda ; digunakan untuk mengakhiri sebuah pernyataan.
10. int main(),menyatakan tipe nilai balik fungsi main.
11. cout dipakai untuk menampilkan teks/data ke layar monitor sehingga menjadi output.
12. struct nod{ struct nod *left; char data; struct nod *right;
};
Pendeklarasian nod dengan menggunakan tipe data abstrak struct.
13. typedef struct nod NOD; pendeklarasian nod yang diubah namanya menjadi NOD menggunakan tipe data abstrak typedef struct.
14. typedef NOD POKOK; pendeklarasian variable NOD yang diberi nama alias POKOK menggunakan tipe data abstrak typedef.
15. NOD *NodBaru (char item){ NOD *n; n=(NOD *)malloc(sizeof(NOD)); if(n!=Nil){ n->data=item; n->left=Nil; n->right=Nil; } Pendeklarasian NOD.
16. return n; fungsi untuk mengembalikan kepada nila/variable n. 17. void BinaPokok (POKOK **T){
*T=NULL; } Pendeklarasian fungsi BinaPokok.
18. typedef enum {FALSE=0, TRUE=1} BOOL; BOOL PokokKosong (POKOK *T){ return ((BOOL)(T==Nil)); } Pendeklarasian fungsi PokokKosong dengan menggunakan tipe data enum, yang memungkinkan kita membuat sebuah program yang memudahkan user dalam membuat pilihan antara True atau False.
-
8
19. void TambahNod (NOD **p, char item){ NOD *n; n=NodBaru(item); *p=n;
} Ini merupakan statement untuk pembuatan prosedur tambah dengan variable item bertipe
data character.
20. void preOrder (POKOK *T){ if(!PokokKosong(T)){ coutleft); coutright); coutright, buah='I'); TambahNod(&keluarga->left->right->right, buah='L'); TambahNod(&keluarga->right, buah='O'); TambahNod(&keluarga->right->left, buah='D'); Ini merupakan statement untuk pemanggilan yang akan ditampilkan kepada pengguna.
25. cout
-
9
preOrder(keluarga); Statement untuk pemanggilan pre-Order.
26. cout
-
10
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!=Nil) { n->data=item; n->left=Nil; n->right=Nil; } return n; } void BinaPokok (POKOK **T) { *T=Nil; } typedef enum {FALSE=0, TRUE=1} BOOL; BOOL PokokKosong (POKOK *T){ return ((BOOL)(T==Nil)); } void TambahNod (NOD **p, char item){ NOD *n; n=NodBaru(item); *p=n; } void preOrder (POKOK *T){ if(!PokokKosong(T)){ coutleft); cout
-
11
if(!PokokKosong(T)){ postOrder(T->left); postOrder(T->right); coutright, tree='O'); TambahNod(&keluarga->left->right->right, tree='S'); TambahNod(&keluarga->right, tree='G'); TambahNod(&keluarga->right->left, tree='E'); TambahNod(&keluarga->right->left->left, tree='R'); cout
-
12
Output Program Praktikum Binary Tree
Pembahasan Program Binary Tree
1. Tanda yang diawali dengan /* dan diakhiri tanda */ merupakan script untuk membuat sebuah
komentar pada pemrograman C++ yang jika didalamnya terdapat sebuah perintah atau teks
maka ketika program dirunning atau dijalankan tidak akan dibaca oleh compiler.
2. #include atau disebut sebagai pengarah preprocessor #include berfungsi untuk
menginstruksikan compiler untuk menyertakan berkas C++ sumber yang lain sebelum
kompilasi dimulai.
3. digunakan untuk memanggil fungsi cout dan cin dalam C++.
4. digunakan untuk mengalokasikan memori dalam C++.
5. digunakan untuk memanggil fungsi getch() dalam C++.
6. #define disini digunakan untuk mensbstitusikan teks Nil NULL dalam program C++.
7. using namespace std; adalah standar deviasi dalam sebuah program dalam bahasa
pemrograman C++.
8. Tanda kurung kurawal {} dimaksudkan untuk mengawali dan mengakhiri bagian main.
9. Tanda ; digunakan untuk mengakhiri sebuah pernyataan.
-
13
10. int main(),menyatakan tipe nilai balik fungsi main.
11. cout dipakai untuk menampilkan teks/data ke layar monitor sehingga menjadi output.
12. struct nod{ struct nod *left; char data; struct nod *right; }; Pendeklarasian nod dengan menggunakan tipe data abstrak struct.
13. typedef struct nod NOD; pendeklarasian nod yang diubah namanya menjadi NOD menggunakan tipe data abstrak typedef struct.
14. typedef NOD POKOK; pendeklarasian variable NOD yang diberi nama alias POKOK menggunakan tipe data abstrak typedef.
15. NOD *NodBaru (char item){ NOD *n; n=(NOD *)malloc(sizeof(NOD)); if(n!=Nil){ n->data=item; n->left=Nil; n->right=Nil; } Pendeklarasian NOD.
16. return n; fungsi untuk mengembalikan kepada nila/variable n.
17. void BinaPokok (POKOK **T){ *T=Nil; } Pendeklarasian fungsi BinaPokok.
18. typedef enum {FALSE=0, TRUE=1} BOOL; BOOL PokokKosong (POKOK *T){ return ((BOOL)(T==Nil)); } Pendeklarasian fungsi PokokKosong dengan menggunakan tipe data enum, yang memungkinkan kita membuat sebuah program yang memudahkan user dalam membuat pilihan antara True atau False.
19. void TambahNod (NOD **p, char item){ NOD *n; n=NodBaru(item); *p=n; }
-
14
Ini merupakan statement untuk pembuatan prosedur tambah dengan variable item bertipe data
character.
20. void preOrder (POKOK *T){ if(!PokokKosong(T)){ coutleft); coutright); coutright, tree='O'); TambahNod(&keluarga->left->right->right, tree='S'); TambahNod(&keluarga->right, tree='G'); TambahNod(&keluarga->right->left, tree='E'); TambahNod(&keluarga->right->left->left, tree='R'); Ini merupakan statement untuk pemanggilan yang akan ditampilkan kepada pengguna.
25. cout
-
15
Statement untuk pemanggilan pre-Order.
27. cout
-
16
BAB III
KESIMPULAN
Dari praktikum yang telah kita buat di atas, dapat disimpulkan bahwa dalam bahasa
pemrograman eclipse c++ #include tidak perlu menggunakan .h. Dalam eclipse C++
juga harus menggunakan using namespace std. Tampilan secara pre-order, in-order, dan post-order
hanya dapat ditampilkan satu huruf saja bukan satu kata. Getch() ternyata dapat digunakan dalam
eclipse C++ dan di damping dengan return 0.
-
17
DAFTAR PUSTAKA
1. Ardhana, YM Kusuma. 2013. Struktur Data dalam Ilustrasi Eclups Indigo C ++.
Yogyakarta: CAPS (Center of Academic Publishing Service).
2. Murya Kusuma Ardhana, Yosef dan Gregorius Airlangga. 2011. AlgoritmaPemrograman
C++ Dalam Ilustrasi. Jasakom : Yogyakarta.
3. Kadir, Abdul. 2012. Buku Pintar C++ Untuk Pemula. Yogyakarta: MediaKom.