Anda di halaman 1dari 16

MODUL IV TREE

MODUL IV
TREE

4.1 TUJUAN
Tujuan dari praktikum ini adalah:
1. Mahasiswa mampu memahami konsep dari tree.
2. Mahasiswa dapat mengimplementasikan tree dalam program.

4.2 DASAR TEORI


4.2.1 Tree
Tree atau pohon merupakan struktur data yang tidak linear yang digunakan
untuk mempresentasikan data yang bersifat hirarki antara elemen-elemennya. Definisi
tree yaitu kumpulan elemen yang salah satu elemennya disebut root (akar) dan elemen
yang lain disebut simpul (node) yang terpecah menjadi sejumlah kumpulan yang tidak
saling berhubungan satu sama lain yang disebut sub-tree atau cabang [1].
Berikut ilustrasi sebuah tree :

Gambar 4.1 Ilustrasi tree


Berikut terminologi dalam tree [2]:
Terminologi Definisi
Predecessor Node yang berada di atas node tertentu.
Successor Node yang berada di bawah node tertentu.
Ancestor Seluruh node yang terletak sebelum node tertentu dan terletak pada
jalur yang sama.
Descendant Seluruh node yang terletak setelah node tertentu dan terletak pada
jalur yang sama.
Parent Predecessor satu level di atas suatu node.
Child Successor satu level di bawah suatu node.
Sibling Node-node yang memiliki parent yang sama.
Subtree Suatu node beserta descendant-nya.

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA IV-1


MODUL IV TREE

Size Banyaknya node dalam suatu tree.


Height Banyaknya tingkatan dalam suatu tree.
Root Node khusus yang tidak memiliki predecessor.
Leaf Node-node dalam tree yang tidak memiliki successor.
Degree Banyaknya child dalam suatu node.
Forest Kumpulan dari tree.
Depth Hasil tingkat node maksimum dikurang satu.
4.2.2 Jenis- jenis Tree
1. Binary Tree
Binary tree adalah tree dengan syarat bahwa tiap node memiliki maksimal 2
subtree, dan kedua subtree harus terpisah.
Berikut adalah contoh binary tree:

Gambar 4.2 Binary tree


2. Full binary tree
Full binary tree adalah binary tree yang tiap node-nya (kecuali leaf) memiliki
dua child dan tiap subtree harus mempunyai panjang path yang sama.
Berikut adalah contoh full binary tree:

Gambar 4.3 Full binary tree

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA IV-2


MODUL IV TREE

3. Complete binary tree


Mirip dengan full binary tree, namun tiap subtree boleh memiliki panjang path
yang berbeda. Node kecuali leaf memiliki dua atau 0 child.
Berikut adalah contoh complete binary tree:

Gambar 4.4 Complete binary tree


4. Skewed binary tree
Yakni binary tree yang semua node-nya (kecuali leaf) hanya memiliki satu child
[1].
Berikut adalah contoh skewed binary tree:

Gambar 4.5 Skewed binary tree


4.2.3 Tree Traversal
Tree traversal merupakan sebuah kunjungan yang berawal dari root,
mengunjungi setiap node dalam tree masing-masing sekali. Kunjungan atau traversing
dapat dilakukan dengan 3 cara yaitu pre-order, in order dan post order.
1. Pre-order
Pembacaan pada pre-order dilakukan dengan mencetak isi node yang
dikunjungi, kemudian kunjungi left child dan kunjungi right child.
Contoh pre-order:

Gambar 4.6 Pre-order binary tree


Bila diketahui pohon biner seperti Gambar 4.6 maka hasil kunjungan dengan
menggunakan metode pre-order adalah 1, 2, 4, 5, 3.
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA IV-3
MODUL IV TREE

2. In-order
Pembacaan pada in-order dilakukan dengan kunjungi left child, kemudian
mencetak isi node yang dikunjungi dan kunjungi right child.
Contoh in-order:

Gambar 4.7 In-order binary tree


Bila diketahui pohon biner seperti Gambar 4.7 maka hasil kunjungan dengan
menggunakan metode in-order adalah 4, 2, 5, 1, 3.
3. Post-order
Pembacaan pada post-order dilakukan dengan kunjungi left child, kemudian
kunjungi right child dan mencetak isi node yang dikunjungi.
Contoh post-order:

Gambar 4.8 Post-order binary tree


Bila diketahui pohon biner seperti Gambar 4.8 maka hasil kunjungan dengan
menggunakan metode post-order adalah 4, 5, 2, 3, 1.
4.2.4 Depth First Search (DFS) dan Breadth First Search (BFS)
1. Depth First Search (DFS)
Pencarian dengan metode ini dilakukan dari node awal secara mendalam hingga
yang paling akhir (dead-end) atau sampai ditemukan. Dengan kata lain, simpul cabang
atau anak yang terlebih dahulu dikunjungi.

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA IV-4


MODUL IV TREE

Gambar 4.9 Depth first search


Proses pencarian dilakukan dengan mengunjungi cabang terlebih dahulu hingga
tiba di simpul terakhir. Jika tujuan yang diinginkan belum tercapai maka pencarian
dilanjutkan ke cabang sebelumnya, turun ke bawah jika memang masih ada cabangnya.
Begitu seterusnya hingga diperoleh tujuan akhir (goal). Depth first search memiliki
kelebihan diantaranya adalah cepat mencapai kedalaman ruang pencarian.
2. Breadth First Search (BFS)
Breadth first search (BFS) merupakan pencarian yang dilakukan dengan
mengunjungi tiap-tiap node secara sistematis pada setiap level hingga keadaan tujuan
(goal state) ditemukan. Atau dengan kata lain, penulusuran yang dilakukan adalah
dengan mengunjungi tiap-tiap node pada level yang sama hingga ditemukan goal state-
nya.

Gambar 4.10 Breadth first search


Pengimplementasian BFS dapat ditelusuri dengan menggunakan daftar (list),
open dan closed, untuk menelusuri gerakan pencarian di dalam ruang keadaan.
Keuntungan menggunakan breadth first search ini, diantaranya adalah tidak akan
menemui jalan buntu dan jika ada satu solusi maka breadth first search akan
menemukannya, dan jika ada lebih dari satu solusi maka solusi minimum akan
ditemukan [2].

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA IV-5


MODUL IV TREE

4.3 PERMASALAHAN
1. Membuat sebuah program sederhana yang menyimpan data mahasiswa dalam
sebuah binary search tree. Data mahasiswa disimpan berdasarkan urutan abjad
nama lengkap. Data mahasiswa yang disimpan adalah nama lengkap, NIM, alamat,
dan nomor telepon.
Fitur-fitur yang dimiliki oleh program tersebut, antara lain:
a. Menambah data mahasiswa baru.
b. Melakukan pencarian terhadap mahasiswa tertentu.
c. Menampilkan data secara preoder, inorder, dan postorder.
Menggunakan method “compareToIgnoreCase()”untuk menentukan urutan nama
mahasiswa.
Sintaks: “string1.compareToIgnoreCase(string2);”
Apabila string 1 urutannya lebih duku dari string 2 berdasarkan abjad, maka nilai
kembalian method lebih kecil dari 0 (negatif). Jika sebaliknya, nilai kembalian
method lebih besar dari 0 (positif).

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA IV-6


MODUL IV TREE

4.4 HASIL DAN PEMBAHASAN


4.4.1 Program Tree
1. Algoritma
a. Insert
1) Masukkan sebuah data pertama yang akan masuk menjadi root.
2) Masukkan data berikutnya ke dalam tree tersebut.
3) Membandingkan data tersebut dengan data yang menjadi root, apabila
urutan nama lebih dahulu dari root maka letaknya ada di sebelah kanan.
Jika urutan nama tidak lebih dulu dari root, maka letaknya di sebelah kiri
root.
4) Ulangi langkah 3 untuk menentukan subtree hingga semua data berhasil
dimasukan.
b. PreOrder
1) Mendeklarasikan pointer pada root.
2) Melakukan pengecekan pada pointer ketua.
3) Apabila ketua bernilai tidak sama dengan NULL.
4) Mencetak data pada variabel pointer.
5) Secara rekursif, mencetak data pada cabang sebelah kiri.
6) Secara rekursif, mencetak data pada cabang sebelah kanan.
c. InOrder
1) Mendeklarasikan pointer pada root.
2) Melakukan pengecekan pada pointer.
3) Apabila ketua tidak sama dengan NULL.
4) Secara rekursif, mencetak data pada cabang sebelah kiri.
5) Mencetak data pada variabel pointer.
6) Secara rekursif, mencetak data pada cabang sebelah kanan.
d. PostOrder
1) Mendeklarasikan pointer pada root.
2) Melakukan pengecekan pada pointer.
3) Apabila pointer tidak sama dengan NULL.
4) Secara rekursif, mencetak data pada cabang sebelah kiri.
5) Secara rekursif, mencetak data pada cabang sebelah kanan.
6) Mencetak data pada variabel pointer.
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA IV-7
MODUL IV TREE

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA IV-8


MODUL IV TREE

2. Source Code
class Node{
String nama;
int nim;
String al;
int tlp;
Node left, right;
public Node(String a, int b, String c, int d){
nama=a;
nim=b;
al=c;
tlp=d;
}
}
public class Mod4{
Node root;
public void Add(String a, int b, String c, int d){
Node temp=new Node(a, b, c, d);
if(root==null){
root=temp;
root.left=root.right=null;
}
else{
Node ha=null, cek=root;
while(cek!=null){
ha=cek;
if(a.compareToIgnoreCase(cek.nama)<0){
cek=cek.left;
}
else{
cek=cek.right;
}
}
if(a.compareToIgnoreCase(ha.nama)<0){
ha.left=temp;
}
else{
ha.right=temp;
}
}
}
public void preOrder(Node root){
if(root!=null){
System.out.println("Nama: "+root.nama+"| NIM:
"+root.nim+"| Alamat: "+root.al+"| No. Telp: "+root.tlp);
preOrder(root.left);
preOrder(root.right);
}
}
public void inOrder(Node root){
if(root!=null){
inOrder(root.left);
System.out.println("Nama: "+root.nama+"| NIM:
"+root.nim+"| Alamat: "+root.al+"| No. Telp: "+root.tlp);
inOrder(root.right);
}
}
public void postOrder(Node root){

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA IV-9


MODUL IV TREE

if(root!=null){
postOrder(root.left);
postOrder(root.right);
System.out.println("Nama: "+root.nama+"| NIM:
"+root.nim+"| Alamat: "+root.al+"| No. Telp: "+root.tlp);
}
}
public void show(Node y){
System.out.println("Nama: "+y.nama+"| NIM: "+y.nim+"|
Alamat: "+y.al+"| No. Telp: "+y.tlp);
}
public Node Search (String nama, Node root){
Node z;
if(nama.compareToIgnoreCase(root.nama)<0){
z=Search(nama,root.left);
}
else if(nama.compareToIgnoreCase(root.nama)==0){
return root;
}
else{
z=Search(nama,root.right);
}
return z;
}
public static void main(String[] args){
Mod4 x = new Mod4();
x.Add("haha",001,"Kota Z",81);
x.Add("wkwk",002,"Kota Y",82);
x.Add("ckck",003,"Kota X",83);
x.Add("jaja",004,"Kota W",84);
x.Add("keke",005,"Kota V",85);
System.out.println("PreOrder:");
x.preOrder(x.root);
System.out.println("\nInOrder:");
x.inOrder(x.root);
System.out.println("\nPostOrder:");
x.postOrder(x.root);
System.out.println("\nSearch: ");
x.show(x.Search("haha",x.root));
}
}
3. Output

Gambar 4.11 Hasil output program tree

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA IV-10


MODUL IV TREE

4.5 ANALISIS DATA


4.5.1 Program Tree
class Node{
String nama;
int nim;
String al;
int tlp;
Node left, right;
Script “class Node{” adalah pembuatan kelas bernama “Node” yang menampung
pendeklarasian variabel “String nama; int nim; String al; int tlp; Node
left, right;”.
public Node(String a, int b, String c, int d){
nama=a;
nim=b;
al=c;
tlp=d;}}
Script “public Node(String a, int b, String c, int d){ ” merupakan
sebuah konstruktor dari kelas “Node” yang di dalamnya terdapat inisialisasi variabel
“nama=a; nim=b; al=c; tlp=d;”.
public class Mod4{
Node root;
Script “public class Mod4{” merupakan class utama yang digunakan fungsi
main. Script “node root” merupakan pendeklarasian variabel.
public void Add(String a, int b, String c, int d){
Node temp=new Node(a, b, c, d);
if(root==null){
root=temp;
root.left=root.right=null; }
else{
Node ha=null, cek=root;
while(cek!=null){
ha=cek;
if(a.compareToIgnoreCase(cek.nama)<0){
cek=cek.left;}
else{
cek=cek.right;}}
if(a.compareToIgnoreCase(ha.nama)<0){
ha.left=temp; }
else{
ha.right=temp; }}}
Script “public void Add(String a, int b, String c, int d){”

merupakan sebuah method dengan nama “Add” dengan tipe data void memiliki
parameter “String a, int b, String c, int d”. Method ini berfungsi untuk
menambah node dari belakang ke depan. Script “Node temp=new Node(a, b, c,
d);” merupakan pembuatan objek node baru.

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA IV-11


MODUL IV TREE

Script “if(root==null)” merupakan sebuah kondisi yang mana jika kondisi


terpenuhi maka akan melakukan proses inisialisasi variabel “root=temp;” dan
“root.left=root.right=null;”, namun jika kondisi tidak terpenuhi maka akan
melakukan proses “else” yang di dalamnya terdapat inisialisasi variabel pula “Node
ha=null, cek=root;”. Di dalam script “else” terdapat kondisi untuk melakukan
pengurutan nama mahasiswa dengan cara membandingkannya menggunakan perintah
“compareToIgnoreCase”.
public void preOrder(Node root){
if(root!=null){
System.out.println("Nama: "+root.nama+"| NIM:
"+root.nim+"| Alamat: "+root.al+"| No. Telp: "+root.tlp);
preOrder(root.left);
preOrder(root.right);
}
}
Script “public void preOrder(Node root){” merupakan sebuah method
dengan nama “preOrder” dengan tipe data void memiliki parameter “Node root”.
Method ini berfungsi untuk menampilkan isi dari root yang ingin ditampilkan, lalu
cabang kiri root, dan yang terakhir menampilkan cabang kanan root.
public void inOrder(Node root){
if(root!=null){
inOrder(root.left);
System.out.println("Nama: "+root.nama+"| NIM:
"+root.nim+"| Alamat: "+root.al+"| No. Telp: "+root.tlp);
inOrder(root.right);}}
Script “public void inOrder(Node root){” merupakan sebuah method
dengan nama “preOrder” dengan tipe data void memiliki parameter “Node root”.
Method ini berfungsi untuk menampilkan cabang kiri root terlebih dahulu, lalu isi dari
root yang ingin ditampilkan, dan yang terakhir menampilkan cabang kanan root.
public void postOrder(Node root){
if(root!=null){
postOrder(root.left);
postOrder(root.right);
System.out.println("Nama: "+root.nama+"| NIM: "+root.nim+"| Alamat:
"+root.al+"| No. Telp: "+root.tlp);}}
Script “public void inOrder(Node root){” merupakan sebuah method
dengan nama “preOrder” dengan tipe data void memiliki parameter “Node root”.
Method ini berfungsi untuk menampilkan cabang kiri root terlebih dahulu, lalu cabang
kanan root, dan yang terakhir isi dari root yang ingin ditampilkan.

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA IV-12


MODUL IV TREE

public void show(Node y){


System.out.println("Nama: "+y.nama+"| NIM: "+y.nim+"| Alamat: "+y.al+"| No.
Telp: "+y.tlp);}
Script “public void show(Node y){” merupakan sebuah method dengan nama
“show” dengan tipe data void memiliki parameter “Node y”. Script ini digunakan untuk
menampilkaan, dan memanggil data nama, NIM, alamat, dan nomor telepon.
public Node Search (String nama, Node root){
Node z;
if(nama.compareToIgnoreCase(root.nama)<0){
z=Search(nama,root.left);}
else if(nama.compareToIgnoreCase(root.nama)==0){
return root;}
else{
z=Search(nama,root.right);}
return z;}
Script “public Node Search (String nama, Node root){” merupakan
sebuah method dengan nama “Search” dengan tipe data void memiliki parameter
“String nama, Node root”. Script ini berfungsi untuk mencari data dengan
menggunakan nama sebagai pembanding. Jika
“if(nama.compareToIgnoreCase(root.nama)<0){” maka data akan dicari pada
cabang kiri. Jika “else if(nama.compareToIgnoreCase(root.nama)==0){” maka
data akan ditampilkan. Jika kedua kondisi tidak terpenuhi, maka data akan dicari pada
cabang kanan.
public static void main(String[] args){
Mod4 x = new Mod4();
x.Add("haha",001,"Kota Z",81);
x.Add("wkwk",002,"Kota Y",82);
x.Add("ckck",003,"Kota X",83);
x.Add("jaja",004,"Kota W",84);
x.Add("keke",005,"Kota V",85);
System.out.println("PreOrder:");
x.preOrder(x.root);
System.out.println("\nInOrder:");
x.inOrder(x.root);
System.out.println("\nPostOrder:");
x.postOrder(x.root);
System.out.println("\nSearch: ");
x.show(x.Search("haha",x.root));}}
Script “public static void main(String[] args){” merupakan main yang
merupakan tempat eksekusi awal dari program. Script “Mod4 x = new Mod4();”
merupakan perintah untuk membuat objek dengan nama “x” dari class “Mod4”. Script
“x.Add("haha",001,"Kota Z",81);” merupakan perintah untuk memasukkan nilai
pada tree dengan memanggil method “Add” dengan parameter “"haha",001,"Kota
Z",81”. Script “x.preOrder(x.root);” digunakan untuk menampilkan data secara

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA IV-13


MODUL IV TREE

pre order dengan memanggil method “preOrder” dengan parameter “x.root”. Script
“x.inOrder(x.root);” digunakan untuk menampilkan data secara in order dengan
memanggil method “inOrder” dengan parameter “x.root”. Script
“x.postOrder(x.root);” digunakan untuk menampilkan data secara post order
dengan memanggil method “postOrder” dengan parameter “x.root”. Script
“x.show(x.Search("haha",x.root));” digunakan untuk menampilkan perintah yang
digunakan untuk mencari data pada tree yang memiliki variabel “nama” sama dengan
“haha” dengan menggunakan method “search”.

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA IV-14


MODUL IV TREE

4.6 KESIMPULAN
Berdasarkan praktikum modul 4 yang telah dilakukan, dapat disimpulkan bahwa:
1. Tree merupakan kumpulan data yang ditampung dalam node-node dengan
membentuk suatu urutan bertingkat dengan node-node yang memiliki peran sebagai
parent atau child bagi node lainnya.
2. Pengimplementasian tree pada dilakukan dengan membuat node root sebagai
hirarki paling atas pada tree yang kemudian node yang akan dimasukan selanjutnya
akan dihubungkan dengan node root dan jika bagian dari node root telah ditempati
oleh semua node anaknya, maka node baru yang akan dimasukan dalam tree akan
dihubungkan dangan node anak dari root.

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA IV-15


MODUL IV TREE

DAFTAR PUSTAKA

[1] Sianpar, R. H., Struktur Data C++ dengan Pemrograman Generik, Yogyakarta:
Andi, 2015.
[2] Sianpar, R. H., I Ketut Wiryajati, Pemrograman & Struktur Data C, Bandung:
Informatika, 2013.

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA IV-16

Anda mungkin juga menyukai