Anda di halaman 1dari 13

LAPORAN PRAKTIKUM RESMI

POHON BINER



Disusun oleh :
Unggul Budi Suryanto
201301011

Dosen pengampu :
Yosef Murya Kusuma Ardhana.S.T., M.Kom




JURUSAN SISTEM INFORMASI
SEKOLAH TINGGI ILMU KOMPUTER YOS SUDARSO
PURWOKERTO
2014

BAB I
TEORI DASAR
POHON BINER (BINARY TREE)

Pengantar
Pohon biner adalah sebuah tree yang pada masing-masing simpulnya 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).

Ada banyak cara dalam mengilustrasikan struktur sebuah node binary tree, namun yang
paling umum adalah ilustrasi seperti pada gambar diatas.

STRICLY BINARY TREE

.
Sebuah stricly binary tree bila mempunyai n leaf maka akan mempunyai 2n-1 buah node.
Perhatikan contoh gambar stricly binary tree diatas, maka dapat dihitung:
Jumlah leaf : 8
Jumlah node : 2*8-1 = 15
COMPLETELY BINARY TREE
Completely binary tree dengan depth = d adalah pohon biner stricly 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 = log
2
(n+1)-1
Complete binary tree dengan depth = d, memiliki ciri-ciri:
Setiap node yang berada dibawah 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 sub-tree kiri dan sub-tree kanan untuk setiap node superordinat paling banyak
selisih 1.
Berikut ini adalah contoh Balance Binary Tree dan Unbalance Binary Tree :

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
kedalam sebuah array satu dimensi. Lihat contoh berikut ini ketika binary tree
direpresentasikan ke dalam array satu dimensi.

Untuk depth=d maka perlu dipersiapkan array satu dimensi minimal 2^(d+1).
Contoh untuk d=3 perlu dipersiapkan minimal 2^4=16 elemen.
Misal dengan :
int A[16];

BAB II
PENJELASAN PROGRAM
.
/*
* pohon.cpp
*
* Created on: 17 Sep 2014
* Author: unggul budi suryanto
*/


#include <iostream>
#include <malloc.h>
#include <conio.h>
#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=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))
{
cout<<" "<<T->data;
preorder(T->left);
preorder(T->right);

}
}

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;

}
}

int main()
{
POKOK *kelapa;
char buah;

binapokok(&kelapa);
tambahNod(&kelapa, buah='M');
tambahNod(&kelapa->left, buah='E');
tambahNod(&kelapa->left->right, buah='I');
tambahNod(&kelapa->left->right->right, buah='L');
tambahNod(&kelapa->right, buah='O');
tambahNod(&kelapa->right->left, buah='D');

cout<<"tampilan secara preorder : ";
preorder(kelapa);

cout<<endl;
cout<<"tampilan secara inorder :";
inorder(kelapa);

cout<<endl;
cout<<"tampilan secara postorder :";
postorder(kelapa);

cout<<endl;
cout<<endl;

//return 0;
getch();

}


Output dari program 1 adalah sebagai berikut :

Berikut penjelasan dari Listing program_1.cpp :

1. Tanda yang diawali dengan */ dan diakhiri dengan /* adalah script yang digunakan untuk
membuat sebuah komentar pada pemrograman C++ dan tidak berpengaruh dengan program
yang akan dijalankan
2. #include atau disebut sebagai pengarah preprocessor #include berfungsi untuk
menginstruksikan compiler untuk menyertakan berkas C++ sumber yang lain sebelum
kompilasi dimulai.
3. <iostream> adalah sebuah library yang dibutuhkan untuk fungsi input seperti cin>>var dan
output seperti cout<<var.
4. #define nil nul adalah pendefinisian bahwa dalam program nul adalah sebagai default
5. struct nod
{
struct nod *left;
char data;
struct nod *right;
};
Adalah pendeklarasian tipe data abstrak bertipe struct .
6. typedef struct nod NOD; adalah pendeklarasian tipedata abstrak berbentuk
typedef dan struct
7. typedef NOD POKOK; adalah pendeklarasian tipedata abstrak berbentuk
typedef.
8. void binapokok (POKOK **T) adalah pendeklarasian suatu menu yang akan
dipanggil dalam program utama bernama binapokok.
9. void tambahNod (NOD **p, char item) adalah pendeklarasian suatu menu yang akan
dipanggil dalam program utama bernama tambah nod.
10. void preorder(POKOK *T) adalah pendeklarasian suatu menu yang akan dipanggil
dalam program utama bernama preorder.
11. Void inorder (pokok *T) adalah pendeklarasian suatu menu yang akan dipanggil
dalam program utama bernama inorder.
12. Void postorder (pokok *T) adalah pendeklarasian suatu menu yang akan dipanggil
dalam program utama bernama postorder.
13. binapokok(&kelapa);
tambahNod(&kelapa, buah='M');
tambahNod(&kelapa->left, buah='E');
tambahNod(&kelapa->left->right, buah='I');
tambahNod(&kelapa->left->right->right, buah='L');
tambahNod(&kelapa->right, buah='O');
tambahNod(&kelapa->right->left, buah='D');
adalah suatu coding yang bertujuan untuk menentukan tempat dalam program agar
sesuai yang kita perlukan dalam membuat pohon biner.
14. cout<<"tampilan secara preorder : ";
preorder(kelapa);
adalah pemanggilan fungsi menu preorder yang sudah ada didalam program
menu dan ditampilkan dalam output programnya.

cout<<endl; adalah fungsi untuk menghendaki enter 1 baris dalam output
program yang ditampilkan.
cout<<"tampilan secara inorder :";
inorder(kelapa);
adalah pemanggilan fungsi menu inorder yang sudah ada didalam program menu
dan ditampilkan dalam output programnya.


cout<<endl; adalah fungsi untuk menghendaki enter 1 baris dalam output
program yang ditampilkan.
cout<<"tampilan secara postorder :";
postorder(kelapa);
adalah pemanggilan fungsi menu postorder yang sudah ada didalam program
menu dan ditampilkan dalam output programnya.


cout<<endl; adalah fungsi untuk menghendaki enter 1 baris dalam output
program yang ditampilkan.

15. return 0; digunakan untuk membaca data karakter.

TUGAS PRAKTIKUM
Tugas praktikum dalam modul ini adalah ::
/*
* aaa.cpp
*
* Created on: 20 Sep 2014
* Author: unggul budi suryanto
*/


#include <iostream>
#include <malloc.h>
#include <conio.h>
#define Nil NULL

using namespace std;

struct nod
{
struct nod *left;
char data;
struct nod *right;
};

typedef struct nod NOD;
typedef NOD silsilah;

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 binasilsilah (silsilah **T)
{
*T=Nil;
}
typedef enum {FALSE=0, TRUE=1 } BOOL;

BOOL silsilahKosong (silsilah *T)
{
return ((BOOL) (T==Nil));
}

void tambahNod (NOD **p, char item)
{
NOD *n;
n=NodBaru(item);
*p=n;

}

void preorder(silsilah *T)
{
if(!silsilahKosong(T))
{
cout<<" "<<T->data;
preorder(T->left);
preorder(T->right);

}
}

void inorder (silsilah *T)
{
if (!silsilahKosong(T))
{
inorder(T->left);
cout<<" "<<T->data;
inorder(T->right);

}
}

void postorder (silsilah *T)
{
if (!silsilahKosong (T))
{
postorder(T->left);
postorder(T->right);
cout<<" "<<T->data;

}
}

int main()
{
silsilah *keluarga;
char kakek;
char ayah;
char om;
char saya;
char adik;
char saudara1;
char saudara2;





cout<<"masukkakn nama kakek : ";
cin>>kakek;


cout<<"masukkan nama ayah : ";
cin>>ayah;


cout<<"masukkan nama om : ";
cin>>om;


cout<<"masukkan mana saya : ";
cin>>saya;


cout<<"masukkan nama adik : ";
cin>>adik;


cout<<"masukkan nama saudara1 ;";
cin>>saudara1;


cout<<"masukkan nama saudara2 : ";
cin>>saudara2;
cout<<endl;


binasilsilah(&keluarga);
tambahNod(&keluarga, kakek);
tambahNod(&keluarga->left, ayah);
tambahNod(&keluarga->right, om);
tambahNod(&keluarga->left->left, saya);
tambahNod(&keluarga->left->right, adik);
tambahNod(&keluarga->right, saudara1);
tambahNod(&keluarga->right->right, saudara2);

cout<<"tampilan secara preorder : ";
preorder(keluarga);

cout<<endl;
cout<<"tampilan secara inorder :";
inorder(keluarga);

cout<<endl;
cout<<"tampilan secara postorder :";
postorder(keluarga);

cout<<endl;
cout<<endl;

return 0;


}


Berikut adalah output :

Penjelasan program luas_persegi.cpp :
1. Tanda yang diawali dengan */ dan diakhiri dengan /* adalah script yang digunakan untuk
membuat sebuah komentar pada pemrograman C++ dan tidak berpengaruh dengan program
yang akan dijalankan
2. #include atau disebut sebagai pengarah preprocessor #include berfungsi untuk
menginstruksikan compiler untuk menyertakan berkas C++ sumber yang lain sebelum
kompilasi dimulai.
3. <iostream> adalah sebuah library yang dibutuhkan untuk fungsi input seperti cin>>var dan
output seperti cout<<var.
4. #define nil nul adalah pendefinisian bahwa dalam program nul adalah sebagai default
5. struct nod
{
struct nod *left;
char data;
struct nod *right;
};
Adalah pendeklarasian tipe data abstrak bertipe struct .
6. typedef struct nod NOD; adalah pendeklarasian tipedata abstrak berbentuk
typedef dan struct
7. typedef NOD POKOK; adalah pendeklarasian tipedata abstrak berbentuk
typedef.
8. void binapokok (POKOK **T) adalah pendeklarasian suatu menu yang akan
dipanggil dalam program utama bernama binapokok.
9. void tambahNod (NOD **p, char item) adalah pendeklarasian suatu menu yang akan
dipanggil dalam program utama bernama tambah nod.
10. void preorder(POKOK *T) adalah pendeklarasian suatu menu yang akan dipanggil
dalam program utama bernama preorder.
11. Void inorder (pokok *T) adalah pendeklarasian suatu menu yang akan dipanggil
dalam program utama bernama inorder.
12. Void postorder (pokok *T) adalah pendeklarasian suatu menu yang akan dipanggil
dalam program utama bernama postorder.
13. cout<<"masukkakn nama kakek : ";
cin>>kakek;
cout<<"masukkan nama ayah : ";
cin>>ayah;
cout<<"masukkan nama om : ";
cin>>om;
cout<<"masukkan mana saya : ";
cin>>saya;
cout<<"masukkan nama adik : ";
cin>>adik;
cout<<"masukkan nama saudara1 ;";
cin>>saudara1;
cout<<"masukkan nama saudara2 : ";
cin>>saudara2;
cout<<endl;
adalah program yang akan ditampilkan dalam output. Cout<<...;
adalah perintah kalimat yg akan ditampilkan. Cin>>..; adalah
perintah yang akan diinputkan dalam program oleh user.
14.
15. binapokok(&kelapa);
16. tambahNod(&kelapa, kakek);
17. tambahNod(&kelapa->left, ayah);
18. tambahNod(&kelapa->right, om);
19. tambahNod(&kelapa->left->left, saya);
20. tambahNod(&kelapa->left->right, adik);
21. tambahNod(&kelapa->right, saudara1);
22. tambahNod(&kelapa->right->right, saudara2);
adalah suatu coding yang bertujuan untuk menentukan tempat dalam program agar
sesuai yang kita perlukan dalam membuat pohon biner.
23. cout<<"tampilan secara preorder : ";
preorder(kelapa);
adalah pemanggilan fungsi menu preorder yang sudah ada didalam program
menu dan ditampilkan dalam output programnya.

cout<<endl; adalah fungsi untuk menghendaki enter 1 baris dalam output
program yang ditampilkan.
cout<<"tampilan secara inorder :";
inorder(kelapa);
adalah pemanggilan fungsi menu inorder yang sudah ada didalam program menu
dan ditampilkan dalam output programnya.


cout<<endl; adalah fungsi untuk menghendaki enter 1 baris dalam output
program yang ditampilkan.
cout<<"tampilan secara postorder :";
postorder(kelapa);
adalah pemanggilan fungsi menu postorder yang sudah ada didalam program
menu dan ditampilkan dalam output programnya.


cout<<endl; adalah fungsi untuk menghendaki enter 1 baris dalam output
program yang ditampilkan.

24. return 0; digunakan untuk membaca data karakter.



BAB III
KESIMPULAN
dalam program C++ eclipse, iostream tidak perlu menggunakan .h sehingga cukup dituliskan
#include<iostream>
tipe data yang digunakan dalam program adalah char.
Untuk menunjuk node apakah akan ke kiri atau kekanan, dapat digunakan kata yang bebas misal ke
kiri dapat menggunakan left atau kiri yang penting dalam rumus dan program sama atau sesuai
sehingga tidak menimbulkan error.
Dengan coding diatas, apabila dalam tipe data char diberi deskripsi jumlah karakter maka dalam
output tidak muncul data yang diinputkan atau bisa juga karakter yang muncul tidak sesuai dengan
apa yang diinputkan.


Daftar pustaka

Ilustrasi eclipse Indigo C++, YM Kusuma Ardhana, ST.

Anda mungkin juga menyukai