NIM : 190533646863
PTI’19 A
//fungsi utama
int main()
{
//deklarasikan variabel
int pil, data;// c;
Node *pohon; //*t;
pohon = NULL; //inisialisasi node pohon
//perulangan do-while
do
{
system("cls"); //bersihkan layar
printf("\t-> PROGRAM TREE <-");
printf("\n\t==================");
printf("\n");
printf("\nMENU");
printf("\n----------------------\n");
printf("1. Tambah Data\n");
printf("2. Lihat pre-order\n");
printf("3. Lihat in-order\n");
printf("4. Lihat post-order\n");
printf("5. Exit\n");
printf("----------------------\n");
printf("Pilihan Menu : ");
scanf("%d", &pil);
switch(pil)
{
//jika pil bernilai 1
case 1 :
printf("\nINPUT : ");
printf("\n-------");
printf("\nData baru : ");
scanf("%d", &data);
//panggil fungsi untuk menambah node yang berisi
data pada tree
tambah(&pohon, data);
break;
3. Lihat in-order
Penjelasan Program :
1. Dalam program ini digunakan header #include <stdio.h> untuk memanggil fungsi
printf , header #include <conio.h> untuk memanggil fungsi getch() guna menahan
tampilan karena program menunggu untuk diberikan karakter , dan header #include
<stdlib.h> untuk menghoperasi pembanding dan operasi konversi.
2. Pada program ini pertama kita deklarasikan fungsi struct yang didalamnya diberikan
suatu field berupa:
typedef struct Node{
int data;
Node *kiri;
Node *kanan;
};
3. Membuat beberapa fungsi tambahan yaitu :
a) Void tambah : didalamnya kita akan membuat sebuah perintah untuk
menambahkan data pada program dengan variabel pointer bertipe data abstrak
yatu node dan variabel bertipe data integer( sebagai penyimpan data)
b) Void preOrder : didalamnya kita isikan perintah perintah dimana kita akan
mengunjungi node secara pre order dan mencetak node yang tadinya telah
diinputkan secara urut dari kunjungan pertama.
c) Void inOrder : didalamnya kita berikan fungsi perintah dimana kita akan
mencetak kunjungan pada node yang ditambahkan secara urut dari node yang
pertama
d) Void postOrder : didalamnya kita berikan fungsi perintah dimana kita akan
mencetak data node yang telah ditambahkan secara ururt mulai dengan kunjungan
terakhir.
4. Selanjutnya deklarasikan variabel yang akan digunakan untuk melakukan
penyimpanan dan pemrosesan data, serta diguanakan sebagai parameter fungsi.
int pil, data;
Node *pohon;
5. Selanjutnya jalankan perulangan do-while yang memiliki kondisi selama nilai
variabel pil dari input user tidak bernilai 5.
6. Tampilkan judul program dan menu program. Jalankan operasi kondisi switch case
1. Jika user memilih menu 1, maka semua pernyataan yang ada didalam case 1
akan dijalankan.
fungsi “tambah(&pohon, data)”.
Program akan memanggil fungsi ‘tambah(&pohon, data)’. Berikut fungsi yang
dipanggil dan dijalankan oleh program :
void tambah(Node **root, int databaru)
{
if((*root) == NULL)
{
Node *baru;
baru = new Node;
baru->data = databaru;
baru->kiri = NULL;
baru->kanan = NULL;
(*root) = baru;
(*root)->kiri = NULL;
(*root)->kanan = NULL;
printf("Data bertambah!");
}
else if(databaru<(*root)->data)
tambah(&(*root)->kiri, databaru);
else if(databaru>(*root)->data)
tambah(&(*root)->kanan, databaru);
else if(databaru == (*root)->data)
printf("Data sudah ada!");
}
2. Jika user memilih menu 2, maka semua pernyataan yang ada didalam case 2 akan
dijalankan.
PreOrder : node yang dikunjungi (induk), kunjungi left, kunjungi right
printf("\nOUTPUT PRE ORDER : ");
printf("\n------------------\n");
if(pohon!=NULL)
preOrder(pohon);
else
printf("Masih kosong!");
Saat pertama kali pernyataan yang ada dalam case 2 dijalankan, maka yang
akan dilakukan program adalah melakukan pengecekan kondisi apakah
pohon bernilai NULL? Jika pohon bernilai NULL artinya belum ada data
sama sekali sehingga akan ditampilkan string “Masih kosong”.
Sebaliknya, jika pohon tidak sama dengan NULL, artinya sudah terbentuk
node/ tree maka akan dipanggil fungsi “preOrder(pohon)”.
3. Jika user memilih menu 3, maka semua pernyataan yang ada didalam case 3 akan
dijalankan.
InOrder : kunjungi left, node yang dikunjungi (induk), kunjungi right
printf("\nOUTPUT IN ORDER : ");
printf("\n------------------\n");
if(pohon!=NULL)
inOrder(pohon);
else
printf("Masih kosong!");
break;
Saat pertama kali pernyataan yang ada dalam case 3 dijalankan, maka yang
akan
dilakukan program adalah melakukan pengecekan kondisi apakah pohon
bernilai
NULL? Jika pohon bernilai NULL artinya belum ada data sama sekali
sehingga akan ditampilkan string “Masih kosong”.
Sebaliknya, jika pohon tidak sama dengan NULL, artinya sudah terbentuk
5. Jika user memilih menu 5, maka perulangan do-while akan dihentikan dan
selanjutnya keluar dari program.
7. Program selesai
2. Program Tree dengan Java Netbeans 8.2 IDE
Source code:
package pohon;
import java.util.Random;
class Node{
int data;
Node nodeKiri;
Node nodeKanan;
public Node(int dt){
data = dt;
nodeKiri = nodeKanan = null;
}
public void sisipDt(int dtSisip){
if (dtSisip < data){
if(nodeKiri == null)
nodeKiri = new Node ( dtSisip );
else nodeKiri.sisipDt( dtSisip );
}
else if(dtSisip > data){
if ( nodeKanan == null )
nodeKanan = new Node (dtSisip);
else nodeKanan.sisipDt( dtSisip );
}
}
}
public class Pohon {
private Node root;
public Pohon() {
root = null;
}
public void sisipDtNode(int dtSisip){
if (root == null)
root = new Node( dtSisip );
else
root.sisipDt(dtSisip);
}
public void preorderTranserval(){
preorder(root);
}
private void preorder (Node node){
if(node == null) return;
System.out.printf("%d ", node.data );
preorder(node.nodeKiri);
preorder(node.nodeKanan);
}
public void inorderTranserval(){
inorder( root );
}
private void inorder(Node node){
if (node == null) return;
inorder(node.nodeKiri);
System.out.printf("%d ", node.data );
preorder(node.nodeKanan);
}
public void postorderTranserval(){
postorder( root );
}
private void postorder (Node node){
if(node == null) return;
preorder(node.nodeKiri);
preorder(node.nodeKanan);
System.out.printf("%d ", node.data );
}
public static void main(String[] args){
Pohon Pohon = new Pohon();
int nilai;
Random randomNumber = new Random();
System.out.println("Sisip nilai data berikut ini :
");
for (int i=1; i<=10; i++){
nilai = randomNumber.nextInt( 100 );
System.out.print(nilai + " " );
Pohon.sisipDtNode(nilai);
}
System.out.println("\n\nPreorderTranserval");
Pohon.preorderTranserval();
System.out.println("\n\nInorderTranserval");
Pohon.inorderTranserval();
System.out.println("\n\nPostorderTranserval");
Pohon.postorderTranserval();
}
}
Output Program :
Penjelasan Program :
Pada program kali ini terdapat dua class yang bernama class Node dan class
Pohon ,Kedua class tersebut mempunyai method-method, diantaranya method node
pada class Node sebagai pengatur tata letak dalam permasalahan binary tree, root
merupakan tempat menampung data yang pertama kali masuk , sedangkan child
merupakan tempat dari data lain yang baru masuk.
Apabila data yang dimasukkan lebih besar dari nilai root otomatis menjadi nilai
data child sebelah kiri, sedangkan data yang lebih kecil akan menjadi child sebelah
kanan. Preorder transversal mencetak data dengan urutan root, child kiri, child kanan,
sedangkan inorder transversal mencetak data dengan urutan child kiri, root, child kanan,
dan postorder transversal mencetak data dengan urutan child kiri, child kanan, root.
Dalam program diatas terdapat fungsi yang digunakan untuk merandom angka,
sehingga output dari setiap kali run akan berbeda atau acak, dengan batas random dari
angka 0 hingga 100, kemudian program akan menampilkan random data dengan cetak
preorder, inorder, dan postorder transversal.