A. TUJUAN
Setelah melakukan praktikum bab ini, mahasiswa diharapakan mampu :
1. Memahami konsep-konsep algoritma Graph dan Tree
2. Mengimplementasikan algoritma Graph dan Tree untuk menyelesaikan sebuah
studi kasus.
B. DASAR TEORI
B1. GRAPH
Suatu graph didefinisikan oleh himpunan vertex (V) dan edge (E). Verteks
menyatakan entitas-entitas data dan edge menyatakan keterhubungan antara verteks.
Biasanya untuk suatu graph G digunakan notasi matematis.
G = (V, E)
Dimana : G = Graph
V = Simpul atau Vertex, atau Node, atau Titik
E = Busur atau Edge, atau arc
POLITEKNIK KEDIRI 2
B.1.2 REPRESENTASI GRAPH
Representasi Graph dapat dilakukan dengan 2 cara yaitu melalui metrik maupun
linkedlist. Penjelasan lebih lanjut akan dijelaskan ppada sub bab berikut.
a. Representasi Graph Tak Berarah Berbentuk Metrik
Graf tersebut dapat direpresentasikan dalam sebuah matrik 5x5 , dimana baris
dan kolom di matriks tersebut menunjukan vertex yang ada.
Dalam matrik diatas dapat kita lihat bahwa kotak yang berisi angka satu
menunjukan bahwa dalam dua vertex tersebut terdapat edge yang
menghubungkannya. Dan jika dalam kotak terdapat angka nol, maka hal tersebut
POLITEKNIK KEDIRI 3
menandakan tidak ada edge yang mengubungkan secara langsung dua vertex
tersebut.
c. Representasi Graph Berarah dan Berbobot Berbentuk Metrik
Ada kalanya graph memiliki nilai. Anggaplah nilai tersebut adalah jarak. Maka dari
situ nantinya kita akan dapat mencari rute tercepat untuk sampai ke titik vertek
tujuan yang telah ditentukan. Contoh representasi Graph berarah dan memiliki
bobot ditunjukkan pada gambar di abwah ini.
B2. TREE
Tree merupakan salah satu bentuk struktur data bukan linier yang
menggambarkan bentuk hierarki antara elemen-elemen. Tree biasanya terdiri dari root
(akar) dan node-node (simpul-simpul) yang berada di bawah root. Struktur seperti tree
sangat banyak sekali dgunakan dalam dunia nyata, misalnya: struktur organisasi suatu
perusahaan, pengaturan filesystem, daftar isi sebuah buku, dan masih banyak lagi.
Ilustrasi tree ditunjukkan pada gambar di bawah ini.
POLITEKNIK KEDIRI 5
Beberapa istilah terkait tree dijelaskan pada tabel berikut:
NAMA KETERANGAN CONTOH
Degree jumlah edge yang keluar dan node E memiliki in degree 1 dan out
(derajat) masuk dari sebuah node. degree 2
Root (akar) node yang memiliki derajat node A adalah root
keluar >=0 dan derajat masuk =
0.
Subtree / bagian salah satu node dibawah tree C adalah right subtree dari A dan
child root sampai ke bawah. tree B merupakan left subtree dari A
node G dan F merupakan child dari
node C node F merupakan parent dari
node J dan K
Ancestor Node yang berada di atas node node B adalah ancestor dari node E
lain.
Descendant node yang berada di bawah node E adalah descendant dari node A.
node lain.
Leaf (daun) semua node yang derajat node D, H, I, J, K, dan G adalah leaf
masuknya 1 dan derajat
keluarnya 0.
Sibling node yang mempunyai level node D adalah sibling dari node A
yang sama dan parent yang
sama.
Height level tertinggi dari tree height dari tree A adalah 3 + 1 = 4
(ketinggian) ditambah 1.
Weight jumlah leaf(daun) pada tree. weight dari tree A adalah 6
(bobot)
BINARY TREE
Sebuah tree dengan syarat bahwa tiap node hanya boleh memiliki maksimal 2 subtree
yang disebut sebagai subpohon kiri(left subtree) dan subpohon kanan (right subtree) dan
kedua subtree tersebut harus terpisah, atau dengan kata lain tiap node dalam binary tree
hanya boleh memiliki paling banyak 2 child.
POLITEKNIK KEDIRI 6
2. Complete Binary Tree : mirip dengan full binary tree, tetapi tiap subtree boleh
memiliki panjang path yang berbeda dan tiap node (kecuali leaf memiliki 2 anak)
3. Skewed Binary Tree : binary tree yang semua nodenya (kecuali leaf) hanya
memiliki satu anak
POLITEKNIK KEDIRI 7
1. Pembacaan (Traversal) data pada binary tree dibagi menjadi 3 yaitu:
a. PreOrder: Cetak root lalu mencetak seluruh data pada sub pohon kiri.
Kemudian mencetak data pada sub pohon kanan.
3. Penambahan Node
Penambahan node pada BST harus mengikuti aturan minMax, dimana node yang
bernilai lebih kecil dari root diletakkan pada subtree sebelah kiri sedangkan node
POLITEKNIK KEDIRI 8
yang bernilai lebih besar diletakkan pada subtree sebelah kanan. Jika ada nilai
yang sama maka node tersebut di-overwrite.
4. Penghapusan Node
Proses penghapusan data pada binary search tree lebih rumit daripada proses
searching maupun proses insertion. Tahapan proses penghapusan yaitu:
1. Carilah node yang akan dihapus
2. Apabila node tersebut leaf (tidak mempunyai anak), hapuslah node tersebut
3. Bila node tersebut memiliki 1 anak, setelah node dihapus, anaknya
menggantikan posisi orangtuanya (node yang dihapus)
4. Bila node tersebut memiliki 2 anak. Setelah node dihapus, gantikan node
tersebut dengan elemen terkecil dari right sub-tree ATAU elemen terbesar
dari left sub-tree
POLITEKNIK KEDIRI 9
C. TUGAS PENDAHULUAN
1. Apa yang dimaksud dengan ADT Graph?
2. Jelaskan maksud bagian graph yaitu vertex dan edge...?
3. Apa yang dimaksud dengan representasi graph menggunakan adjacency matrik?
D. PERALATAN DAN KOMPONEN
1. Komputer /Laptop sebagai hardware
2. Netbeans sebagai editor source code
E. LANGKAH PRAKTIKUM
1. Buatlah kelas bernama M5_Binary kemudian ketikkan source code berikut:
package StrukturData;
/**
*
* @author asus
*/
import java.util.Scanner;
import java.io.*;
import java.util.*; // for Stack class
////////////////////////////////////////////////////////////////
class Node {
class Tree {
// -------------------------------------------------------------
public Tree() // constructor
{
root = null;
} // no nodes in tree yet
// -------------------------------------------------------------
POLITEKNIK KEDIRI 10
if (current == null) // if no child,
{
return null; // didn't find it
}
}
return current; // found it
} // end find()
// -------------------------------------------------------------
POLITEKNIK KEDIRI 11
root = null; // tree is empty
} else if (isLeftChild) {
parent.leftChild = null; // disconnect
} else // from parent
{
parent.rightChild = null;
}
} // if no right child, replace with left subtree
else if (current.rightChild == null) {
if (current == root) {
root = current.leftChild;
} else if (isLeftChild) {
parent.leftChild = current.leftChild;
} else {
parent.rightChild = current.leftChild;
}
} // if no left child, replace with right subtree
else if (current.leftChild == null) {
if (current == root) {
root = current.rightChild;
} else if (isLeftChild) {
parent.leftChild = current.rightChild;
} else {
parent.rightChild = current.rightChild;
}
} else // two children, so replace with inorder successor
{
// get successor of node to delete (current)
Node successor = getSuccessor(current);
POLITEKNIK KEDIRI 12
System.out.print("\nInorder traversal: ");
inOrder(root);
break;
case 3:
System.out.print("\nPostorder traversal: ");
postOrder(root);
break;
}
System.out.println();
}
// -------------------------------------------------------------
if (temp.leftChild != null
|| temp.rightChild != null) {
isRowEmpty = false;
}
} else {
System.out.print("--");
localStack.push(null);
localStack.push(null);
}
for (int j = 0; j < nBlanks * 2 - 2; j++) {
System.out.print(' ');
}
} // end while globalStack not empty
System.out.println();
nBlanks /= 2;
POLITEKNIK KEDIRI 13
while (localStack.isEmpty() == false) {
globalStack.push(localStack.pop());
}
} // end while isRowEmpty is false
System.out.println(
"......................................................");
} // end displayTree()
// -------------------------------------------------------------
} // end class Tree
////////////////////////////////////////////////////////////////
class BinarySearchTree {
int value;
Tree theTree = new Tree();
theTree.insert(50, 1.5);
theTree.insert(25, 1.2);
theTree.insert(75, 1.7);
theTree.insert(12, 1.5);
theTree.insert(37, 1.2);
theTree.insert(43, 1.7);
theTree.insert(30, 1.5);
theTree.insert(33, 1.2);
theTree.insert(87, 1.7);
theTree.insert(93, 1.5);
theTree.insert(97, 1.5);
while (true) {
System.out.println("\n>> Operasi BST: ");
System.out.print("Masukkan huruf "
+ "\ns : show the tree (menampilkan tree)"
+ "\ni : insert a node (memasukkan node)"
+ "\nf : find a node (mencari node)"
+ "\nd : delete a node (menghapus node)"
+ "\nt : traverse (pencarian)\n");
System.out.print(">> Pilihan Operasi : ");
int choice = getChar();
switch (choice) {
case 's':
theTree.displayTree();
break;
case 'i':
System.out.print("Input nilai yang akan dimasukkan dalam tree:
");
value = getInt();
theTree.insert(value, value + 0.9);
break;
case 'f':
System.out.print("Input nilai yang dicari: ");
value = getInt();
Node found = theTree.find(value);
if (found != null) {
System.out.print("Nilai ditemukan : ");
found.displayNode();
System.out.println();
} else {
System.out.print("Nilai tidak ditemukan ");
}
System.out.print(value + '\n');
break;
case 'd':
System.out.print("Input nilai yang akan dihapus : ");
value = getInt();
boolean didDelete = theTree.delete(value);
if (didDelete) {
System.out.print("Terhapus " + value + '\n');
} else {
System.out.print("Tidak bisa dihapus ");
}
System.out.print(value + '\n');
POLITEKNIK KEDIRI 14
break;
case 't':
System.out.println("1. Preorder\n2. Inorder \n3. Postorder");
System.out.print("Masukkan 1/2/3: ");
value = getInt();
theTree.traverse(value);
break;
default:
System.out.print("Invalid entry\n");
} // end switch
} // end while
} // end main()
// -------------------------------------------------------------
F. TUGAS
1. Ilustrasikan model binary search tree di bawah ini setelah anda melakukan
perintah-perintah berikut:
a. Hapus 15
b. Hapus 7
c. Tambahkan 16
POLITEKNIK KEDIRI 15
2. Buatlah source code yang akan menampilkan hasil yang sama dengan ilustrasi di
atas mulai dari data yang lengkap, penghapusan node 15 dan 7 serta penambahan
node 16.
G. PENUTUP
Pastikan hal-hal berikut sebelum Anda keluar dari laboratorium :
1. Meja dan kursi tertata kembali dalam keadaan rapi.
2. Komputer dan Monitor dalam keadaan mati.
3. Peralatan dan komponen dikembaikan ke tempat asalnya.
4. Laboratorium dalam keadaan bersih dan rapi.
5. Jangan meninggalkan barang pribadi di laboratorium
G. REFERENSI
Wibowo, Nur Cahyo., Ridwandono, Doddy., Modul Praktikum Struktur Data:
Surabaya,2016
https://algorithms.tutorialhorizon.com/binary-search-tree-complete-
implementation/
http: //okeinformatika.blogspot.com/2015/12 /algoritma-dan-struktur-data-
pertemuan.html?m=1
POLITEKNIK KEDIRI 16