LAPORAN PRAKTIKUM ALGORITMA DAN STRUKTUR (7)

LAPORAN PRAKTIKUM
ALGORITMA DAN STRUKTUR DATA II
MODUL V
BINARY TREE (POHON BINER)

Disusun Oleh :
Syukur Jaya Mendrofa
201501072
Kelas: C

Dosen Pengampu :
Oskar Ika Adi Nugroho, ST., MT

JURUSAN SISTEM INFORMASI
SEKOLAH TINGGI ILMU KOMPUTER “YOS SUDARSO”
PURWOKERTO
2016

BAB I
DASAR TEORI
POHON BINER (BINARY TREE)

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).
OPERASI PADA POHON BINER
Operasi pada binary tree merupakan satu rangkaian proses yang dapat dibagi menjadi
beberapa bagian operasi (fungsi) seperti:
1.
2.
3.
4.
5.
6.

Inisisalisasi.
Pembuatan sebuah node.
Pembuatan node akar.
Penambahan (insert) node baru kedalam sebuah tree.
Penghapusan (delete) node dari sebuah tree.
Pembacaan atau penelusuran binary tree.


Pembagian ini bukan berdasarkan urutan proses, namun hanya berdasarkan fungsinya yang
berbeda.
PROSES INISIALISASI
Inisialisasi yang dimaksud adalah pemberian nilai awal pada suatu variabel atau kondisi
yang dapat digunakan sebagai ciri suatu kondisi.
Instruksi dasar untuk inisisalisasi.
Root = NULL;
P=NULL;
Inisisalisasi bila ditulis dalam sebuah fungsi.
//Nama fungsi Inisisalisasi
void Inisialisasi() {
Root=NULL;
P=NULL;
}
Fungsi ini harus dilaksanakan sebelum operasi yang lain. Pointer Root ketika
dideklarasikan isinya sudah ada, tapi nilainya tidak diketahui. Pointer Root perlu diisi
dengan NULL karena Pointer Root ini akan dijadikan tanda. Bila isinya NULL, berarti tree
belum ada. Bila isinya bukan NULL berarti tree sudah ada, dimana node akar sedang
ditunjuk oleh pointer Root.


PEMBUATAN SEBUAH NODE
Fungsi untuk Pembuatan Sebuah Node.
void BuatSimpul(char X){
P=(Simpul*)malloc(sizeof(Simpul));
If(P != NULL)
{ P->INFO=X;
P->Left=NULL;
P->Right=NULL;
}
else
{ printf(“Pembuatan Node Gagal”);
Exit(1);
}
}

Dengan fungsi ini terbentuk sebuah node yang ditunjuk oleh pointer P dengan ilustrasi
sebagai berikut:

Penting : Bila pembuatan node gagal karena suatu hal, misalnya karena keadaan memory

yang sudah penuh, maka pointer P akan berisi NULL. Bila hal ini terjadi maka dilayar
akan tercetak pesan “Pembuatan Node Gagal”, dan proses dihentikan dengan exit(1). Pada
program aplikasi tentunya tidak sesederhana ini, tapi disesuaikan dengan sifat dan
kebutuhan aplikasi.
MENJADIKAN SEBUAH NODE SEBAGAI NODE AKAR SUATU TREE
Fungsi untuk Menjadikan Sebuah Node Sebagai Node Akar.
void BuatSimpulAkar()
{ if(Root == NULL)

{ if(P != NULL)
{ Root=P;
Root->Left=NULL;
Root->Right=NULL;
}
else
printf(“\n Node Belum Dibuat”);
}
else
printf(“Pohon Sudah Ada”);
}

Hasil fungsi diatas dapat diilustrasikan sebagai berikut:

Sebelum membuat tree pertama kali (node akar) perlu diperiksa terlebih dahulu
apakah tree memang belum ada. Ciri tree yang belum ada adalah Root=NULL. Kalau tree
sudah ada jangan membuat node akar baru, yang artinya membuat tree baru, dan pointer
Root diminta untuk mencetak komentar “Tree Sudah Ada”.

BAB II
TUGAS
1.

Program mencari data yang telah dimasukkan

Listing Program
#include
using namespace std;
struct BstNode
{
int data;
BstNode* left;

BstNode* right;
};
BstNode* GetNewNode(int data)
{
BstNode* newNode = new BstNode();
newNode->data = data;
newNode->left = newNode->right = NULL;
return newNode;
}
BstNode* Insert(BstNode* root, int data)
{
if (root == NULL)
{
root = GetNewNode(data);
}
//jika data yang dimasukan lesser,
//masuk ke left subtree
else if (data data)
{
root->left = Insert(root->left, data);

}
//else, masuk ke right subtree
else
{
root->right = Insert(root->right, data);
}
return root;
}
bool Search(BstNode* root, int data)
{
if (root == NULL)
{
return false;
}
else if (root->data == data)

{
return true;
}
else if (data data)

{
return Search(root->left, data);
}
else
{
return Search(root->right, data);
}
}
int main()
{
BstNode* root = NULL;
root = Insert(root, 100);
root = Insert(root, 50);
root = Insert(root, 200);
root = Insert(root, 300);
root = Insert(root, 20);
root = Insert(root, 150);
root = Insert(root, 70);
root = Insert(root, 180);
root = Insert(root, 120);

root = Insert(root, 30);
int number;
cout > number;
if (Search(root, number) == true) cout using namespace std; menyatakan kepada compiler bahwa
program menggunakan namespace bernama std; namespace fungsinya untuk
mengelompokkan elemen-elemen ke dalam sebuah nama. std adalah nama bawaan
yang digunakan pada semua pustaka standar C++. Contohnya untuk menampilkan
keluaran berupa cout, endl.



struct BstNode => tipe data struct dengan BstNode.



int data; => anggota struct dengan nama variable data tipe data integer.



BstNode* left; => anggota struct dengan tipe data ‘BstNode, variable pointer dengan

nama variable ponter left.



BstNode* right; => anggota struct dengan tipe data ‘BstNode, variable pointer dengan
nama variable ponter right.



BstNode* GetNewNode(int data) => fungsi untuk menyimpan alamat node baru yang
akan di cari
{//awal fungsi BstNode* GetNewNode(int data)
BstNode* newNode = new BstNode(); //untuk menginisialisasi nilai BstNode*
newNode yaitu sama dengan new BstNode().
newNode->data = data; //menyimpan alamat data.
newNode->left = newNode->right = NULL; //menginisialisasi alamat sebelah kiri dan
sebelah kanan sama dengan 0.
return newNode; //nilai yang akan dikembalikan adalah nilai yang telah disimpan di
dalam newNode.
}//akhir fungsi BstNode* GetNewNode(int data)




BstNode* Insert(BstNode* root, int data) => fungsi untuk menyimpan alamat node
baru yang dimasukkan.
{//awal fungsi BstNode* Insert(BstNode* root, int data)
if (root == NULL) //jika alamat akar = 0.
{//awal if
root = GetNewNode(data); //nilai alamat akar = memasukkan nilai alamat node baru
yang akan di cari
}//akhir if
else if (data data)//jika nilai dialamat akar data lebih kecil atau sama dengan
nilai yang sedang di cari.
{//awal else if
root->left = Insert(root->left, data); //inisialisasi root->left yaitu sama dengan
memanggil fungsi BstNode* Insert(BstNode* root, int data)
}//akhir else if
Else jika (root == NULL) dan jika (data data) maka:
{//awal else
root->right = Insert(root->right, data); //inisialisasi root->right yaitu sama dengan
memanggil fungsi BstNode* Insert(BstNode* root, int data)
}//akhir else
return root; //nilai kembalian pada fungsi ini.
}// akhir fungsi BstNode* Insert(BstNode* root, int data)



bool Search(BstNode* root, int data) => fungsi Boolean dengan nama fungsi Search
yaitu fungsi untuk mencari data yang akan dimasukkan.
{//awal fungsi boolean
if (root == NULL) //jika root == 0
{//awal if
return false; //maka nilai kembalian false

}//akhir if
else if //jika tidak
(root->data == data) //alamat data sama dengan data yang sudah ada.
{//awal else if
return true; //maka nilai kembalian true, lanjut ke bawah.
}//akhir else if
else if //jika tidak
(data data)// data yang dimasukkan lebih kecil dari data yang sudah ada.
{//awal else if
return Search(root->left, data);// maka nilai kembaliannya data dicari di posisi sebelah
kiri.
}//akhir else if
Else//kalau tidak dari pernyataan diatas maka
{//awal else
return Search(root->right, data); maka nilai kembaliannya data dicari di posisi sebelah
kanan.
}//akhir else
}//akhir fungsi boolean


int main()//fungsi utama
{//awal tubuh fungsi utama
BstNode* root = NULL; //menginisialisasi bahwa alamat akar selalu Null.
root = Insert(root, 100);
root = Insert(root, 50);
root = Insert(root, 200);
root = Insert(root, 300);
Data yang telah ada di dalam program,
root = Insert(root, 20);
yang akan dicocokkan apakah sama
root = Insert(root, 150);
dengan data yang akan dicari
root = Insert(root, 70);
root = Insert(root, 180);
root = Insert(root, 120);
root = Insert(root, 30);
pohon biner dari data yang telah dimasukkan di dalam program di atas :
oleh karena itu, jika data yang akan dimasukkan lebih kecil dari pada 100 maka
program akan mencari data tersebut pada posisi sebelah kiri, jika data yang
dimasukkan ada maka output akan menampilkan ketemu, jika data yang
dimasukkan tidak ada yang sama dengan data yang telah ada maka output akan
menampilkan Tidak ketemu.
Dan jika data yang akan dimasukkan lebih besar dari pada 100 maka program
akan mencari data tersebut pada posisi sebelah kanan, jika data yang dimasukkan
ada maka output akan menampilkan ketemu, jika data yang dimasukkan tidak ada
yang sama dengan data yang telah ada maka output akan menampilkan Tidak
ketemu.

int number; //variable untuk menyimpan angka yang akan dicari.
cout > number; menyimpan angka yang akan dicari
if (Search(root, number) == true) //jika data yang dicari ditemukan maka True
cout pAnakKanan;
if(pSkrg == NULL) //jika di akhir,
{ //sisip di kanan
pInduk->pAnakKanan = SimpulBaru;
return;
}
} //akhir else ke kanan
} //akhir while
} //akhir else tidak di akar
} //akhir sisip()
void jelajah(int tipeJelajah)
{
switch(tipeJelajah)
{
case 1: cout pAnakKanan); //anak kanan
cout iData