Modul Tree Dan Graph
Modul Tree Dan Graph
MODUL 10
GRAPH DAN TREE
A. TUJUAN PRAKTIKUM
a. Mahasiswa diharapkan mampu memahami graph dan tree
b. Mahasiswa diharapkan mampu mengimplementasikan graph dan tree pada
pemrograman
B. DASAR TEORI
1. Graph
Graf atau graph adalah struktur data yang digunakan untuk merepresentasikan
hubungan antara objek dalam bentuk node atau vertex dan sambungan antara node
tersebut dalam bentuk edge atau edge. Graf terdiri dari simpul dan busur yang secara
matematis dinyatakan sebagai :
G = (V, E)
Dimana G adalah Graph, V adalah simpul atau vertex dan node sebagai titik atau egde.
Dapat digambarkan:
Vertex/Simpul
e3
B C
e5
e4
Edge/Busur e1
A D
e2
Gambar 1 Conto h Graph
Graph dapat digunakan dalam berbagai aplikasi, seperti jaringan sosial, pemetaan jalan,
dan pemodelan data.
Jenis-jenis Graph
a. Graph berarah (directed graph): Urutan simpul mempunyai arti. Misal busur AB
adalah e1 sedangkan busur BA adalah e8.
b. Graph tak berarah (undirected graph): Urutan simpul dalam sebuah busur tidak
diperhatikan. Misal busur e1 dapat disebut busur AB atau BA.
c. Weigth Graph : Graph yang mempunyai nilai pada tiap edgenya.
Yang perlu diperhatikan dalam membuat representasi graph dalam bentuk linked list
adalah membedakan antara simpul vertex dengan simpul edge. Simpul vertex
menyatakan simpul atau vertex dan simpul edge menyatakan busur (hubungan antar
simbol). Struktur keduanya bisa sama bisa juga berbeda tergantung kebutuhan, namun
biasanya disamakan. Yang membedakan antara simpul vertex dengan simpul edge
nantinya adalah anggapan terhadap simpul tersebut juga fungsinya masing-masing.
Dalam ilmu komputer, pohon adalah struktur data yang sangat umum dan kuat yang
menyerupai nyata pohon. Ini terdiri dari satu set node tertaut yang terurut dalam
grafik yang terhubung, di mana setiap node memiliki paling banyak satu simpul
induk, dan nol atau lebih simpul anak dengan urutan tertentu. Struktur data tree
digunakan untuk menyimpan data-data hierarki seperti pohon keluarga, skema
pertandingan, struktur organisasi. Istilah dalam struktur data tree dapat dirangkum
sebagai berikut :
Binary tree atau pohon biner merupakan struktur data pohon akan tetapi setiap
simpul dalam pohon diprasyaratkan memiliki simpul satu level di bawahnya (child)
tidak lebih dari 2 simpul, artinya jumlah child yang diperbolehkan yakni 0, 1, dan 2.
Gambar 1, menunjukkan contoh dari struktur data binary tree.
Membuat struktur data binary tree dalam suatu program (berbahasa C++) dapat
menggunakan struct yang memiliki 2 buah pointer, seperti halnya double linked list.
a. Create: digunakan untuk membentuk binary tree baru yang masih kosong.
b. Clear: digunakan untuk mengosongkan binary tree yang sudah ada atau
menghapus semua node pada binary tree.
c. isEmpty: digunakan untuk memeriksa apakah binary tree masih kosong atau
tidak.
d. Insert: digunakan untuk memasukkan sebuah node kedalam tree.
e. Find: digunakan untuk mencari root, parent, left child, atau right child dari suatu
node dengan syarat tree tidak boleh kosong.
f. Update: digunakan untuk mengubah isi dari node yang ditunjuk oleh pointer
current dengan syarat tree tidak boleh kosong.
g. Retrive: digunakan untuk mengetahui isi dari node yang ditunjuk pointer
current dengan syarat tree tidak boleh kosong.
h. Delete Sub: digunakan untuk menghapus sebuah subtree (node beserta seluruh
descendant-nya) yang ditunjuk pointer current dengan syarat tree tidak boleh
kosong.
i. Characteristic: digunakan untuk mengetahui karakteristik dari suatu tree.
Yakni size, height, serta average lenght-nya.
j. Traverse: digunakan untuk mengunjungi seluruh node-node pada tree dengan
cara traversal. Terdapat 3 metode traversal yang dibahas dalam modul ini yakni
Pre-Order, In-Order, dan Post-Order.
1. Pre-Order
Penelusuran secara pre-order memiliki alur:
a. Cetak data pada simpul root
b. Secara rekursif mencetak seluruh data pada subpohon kiri
c. Secara rekursif mencetak seluruh data pada subpohon kanan
Dapat kita turunkan rumus penelusuran menjadi:
Alur pre-order
2. In-Order
Penelusuran secara in-order memiliki alur:
a. Secara rekursif mencetak seluruh data pada subpohon kiri
b. Cetak data pada root
c. Secara rekursif mencetak seluruh data pada subpohon kanan
Dapat kita turunkan rumus penelusuran menjadi:
3. Post Order
C. UNGUIDED
Program Graph
#include <iostream>
#include <iomanip>
using namespace std;
void tampilGraph()
{
for(int baris =0; baris <7; baris++){
cout << " " <<setiosflags(ios::left)<<setw(15)
<<simpul[baris] << " : ";
for(int kolom=0;kolom<7;kolom++){
if(busur[baris][kolom] !=0){
cout << " " << simpul[kolom] << "("
int main()
{
tampilGraph();
return 0;
}
Program Tree
#include <iostream>
//Deklarasi Pohon
struct Pohon{
char data;
Pohon *left, *right, *parent;
};
//Inisialisasi
void init()
{
root = NULL;
}
//Cek Node
int isEmpty()
{
if (root == NULL)
return 1; //true
else
return 0; //false
}
//Tambah Kiri
//Tambah Kanan
Pohon *insertRight(char data, Pohon *node )
{
if( root == NULL ){
cout << "\n Buat tree terlebih dahulu!" << endl;
return NULL;
}else{
// cek apakah child kanan ada atau tidak
if( node->right != NULL ){
// kalau ada
cout << "\n Node " << node->data << " sudah ada child kanan!"
<< endl;
return NULL;
}else{
// kalau tidak ada
baru = new Pohon();
baru->data = data;
baru->left = NULL;
baru->right = NULL;
baru->parent = node;
node->right = baru;
cout << "\n Node " << data << " berhasil ditambahkan ke child
kanan " << baru->parent->data << endl;
return baru;
}
}
}
10 | S t r u k t u r D a t a d a n A l g o r i t m a
Modul 10 Graph dan Tree
if( !node )
cout << "\n Node yang ingin diganti tidak ada!!" << endl;
else{
char temp = node->data;
node->data = data;
cout << "\n Node " << temp << " berhasil diubah menjadi " <<
data << endl;
}
}
}
if( !node->parent )
cout << " Parent : (tidak punya parent)" << endl;
else
cout << " Parent : " << node->parent->data << endl;
else
if( !node->left )
cout << " Child Kiri : (tidak punya Child kiri)" << endl;
11 | S t r u k t u r D a t a d a n A l g o r i t m a
Modul 10 Graph dan Tree
else
cout << " Child Kiri : " << node->left->data << endl;
if( !node->right )
cout << " Child Kanan : (tidak punya Child kanan)" << endl;
else
cout << " Child Kanan : " << node->right->data << endl;
}
}
}
// Penelurusan (Traversal)
// preOrder
void preOrder(Pohon *node = root)
{
if(!root)
cout << "\n Buat tree terlebih dahulu!" << endl;
else{
// inOrder
void inOrder(Pohon *node = root)
{
if(!root)
cout << "\n Buat tree terlebih dahulu!" << endl;
else{
if(node != NULL){
inOrder(node->left);
cout << " " << node->data << ", ";
inOrder(node->right);
}
}
}
// postOrder
void postOrder(Pohon *node = root)
{
if(!root)
cout << "\n Buat tree terlebih dahulu!" << endl;
else{
if( node != NULL ){
postOrder(node->left);
postOrder(node->right);
cout << " " << node->data << ", ";
}
}
}
12 | S t r u k t u r D a t a d a n A l g o r i t m a
Modul 10 Graph dan Tree
else{
if( node != NULL ){
if( node != root ){
node->parent->left = NULL;
node->parent->right = NULL;
}
deleteTree(node->left);
deleteTree(node->right);
// Hapus SubTree
void deleteSub(Pohon *node){
if( !root )
cout << "\n Buat tree terlebih dahulu!" << endl;
else{
deleteTree(node->left);
deleteTree(node->right);
cout << "\n Node subtree " << node->data << " berhasil
dihapus." << endl;
}
}
// Hapus Tree
void clear(){
if( !root )
cout << "\n Buat tree terlebih dahulu!!" << endl;
else{
deleteTree(root);
cout << "\n Pohon berhasil dihapus." << endl;
}
}
if( !node ){
return 0;
}else{
return 1 + size( node->left ) + size(node->right);
}
}
}
13 | S t r u k t u r D a t a d a n A l g o r i t m a
Modul 10 Graph dan Tree
}
}
}
// Karakteristik Tree
void charateristic()
{
cout << "\n Size Tree : " << size() << endl;
cout << " Height Tree : " << height() << endl;
cout << " Average Node of Tree : " << size() / height() << endl;
}
int main()
{
buatNode('A');
update('Z', nodeC);
update('C', nodeC);
retrieve(nodeC);
find(nodeC);
14 | S t r u k t u r D a t a d a n A l g o r i t m a
Modul 10 Graph dan Tree
charateristic();
deleteSub(nodeE);
cout << "\n PreOrder :" << endl;
preOrder();
cout << "\n" << endl;
charateristic();
D. GUIDED
*Cantumkan NIM pada salah satu variabel di dalam program.
Contoh : int nama_22102003;
1. Buatlah program graph dengan menggunakan inputan user untuk menghitung
jarak dari sebuah kota ke kota lainnya.
Output Program
2. Modifikasi unguided tree diatas dengan program menu menggunakan input data
tree dari user!
15 | S t r u k t u r D a t a d a n A l g o r i t m a