Laporan Praktikum Resmi Pohon Biner - Binary Tree (Cintia Yosfin Samalle_201301041)

download Laporan Praktikum Resmi Pohon Biner - Binary Tree (Cintia Yosfin Samalle_201301041)

of 17

description

Laporan Praktikum - Binary Tree - Cintia Yosfin Samalle - 201301041 - 24 September 2014

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.