Anda di halaman 1dari 13

BINARY TREE PADA JAVA

A. TUJUAN
Setelah melakukan praktikum mahasiswa diharapkan mampu :
 Mengerti dan memahami binary tree
 Mendeklarasikan, menginisialisasi dan mengakses binary tree
 Membuat program dengan menggunakan binary tree

B. DASAR TEORI

Tree merupakan salah satu bentuk struktur data bukan linier yang menggambarkan bentuk
hierarki antara elemen-elemen. Tree atau pohon biasanya terdiri dari root atau akar, dan node-
node atau simpul-simpul yang berada di bawah root. Pohon atau tree dapat kita temukan dalam
kehidupan sehari-hari yang berbentuk struktur pohon, khususnya untuk menggambarkan sesuatu
yang berjenjang atau dapat disebut berhirarki. Contohnya yaitu diagram struktur organisasi mulai
dari pimpinan puncak ke para pegawai dibawahnya, diagram silsilah keluarga, atau jadwal
pertandingan dengan system gugur. Implementasi struktur pohon dapat memanfaatkan pointer
seperti model linked list. Setiap node mempunyai bagian data dan bagian pointer (Siahaan,
2018).

Sebuah pohon biner BT merupakan sebuah himpunan berhingga atas node-node, yang berupa
himpunan kosong ataupun yang tidak kosong sedemikian hingga darinya dapat ditetapkan
sebuah elemen 𝑡 ∈ 𝐵𝑇 dan BT – {t} terpartisi menjadi dua subhimpunan BT1 dan BT2, yang
keduanya juga merupakan pohon biner dan disebut subpohon biner kiri dan subpohon biner
kanan (left and right sub binary tree). Kedua subpohon ini juga biasa disebut anak kanan dan
anak kiri. Istilah-istilah pada binary tree antara lain :

1. Degree (derajat) adalah jumlah edge yang keluar dan masuk dari sebuah node.
2. Root (akar) adalah node yang memiliki derajat keluar ≥ 0 dan derajat masuk = 0.
3. Subtree/child adalah adalah bagian salah satu node dibawah root sampai ke bawah.
4. Predecessor adalah node yang berada di atas node tertentu.
5. Successor adalah node yang berada di bawah node tertentu.
6. Parent adalah predecessor satu level diatas satu node.
7. Child adalah successor satu level di atas suatu node.
8. Size adalah banyaknya node dalah suatu tree.
9. Ancestor adalah Node yang berada di atas node lain.
10. Descendant adalah node yang berada di bawah node lain.
11. Leaf (daun) adalah semua node yang derajat masuknya 1 dan derajat keluarnya 0.
12. Sibling adalah node yang mempunyai level yang sama dan parent yang sama.
13. Height adalah level tertinggi dari tree ditambah 1
14. Weight adalah jumlah daun pada tree

(Sismoro, 2004).

Cara untuk melintasi semua node pada pohon biner dapat dimulai dari node root, kemudian
dilanjutkan secara rekursi ke anak-anaknya. Jika kita menggunakan aturan bahwa kiri selalu
dikunjungi lebih awal dari kanan(LRO:_Left Right Order), maka diperoleh tiga cara yang
dikenal dengan Preorder (root-kiri-kanan), Inorder (kiri-root-kanan), dan Postorder (kiri-kanan-
root). Pemilihan nama tersebut didasarkan pada langkah mengunjungi root. Pada kunjungan
preorder, root dikunjungi sebelum kedua anaknya; Inorder, root dikunjungi setelah anak kirinya
dan sebelum anak kanannya; sedangkan pada kunjungan postorder, root dikunjungi setelah
kedua anaknya.

Binary tree terdiri dari :

1. Full Binary Tree : semua node (kecuali leaf pasti memiliki 2 anak dan subtree memiliki
panjang path yang sama).
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.

(Nugroho, 2009).

C. ALAT & BAHAN


Software Java dan Eclipse

D. LANGKAH-LANGKAH

D1. Menjalankan Eclipse

Berikut langkah-langkah utama yang harus kita lakukan dalam menjalankan Java :

Langkah 1 : membuka ikon aplikasi Eclipse pada desktop. Aplikasi akan memunculkan tampilan
untuk pengguna dalam menentukan dimana tempat penyimpanan skrip yang dibuat seperti pada
gambar dibawah ini :

Gambar 5. Tampilan Utama Eclipse

tempat penyimpanan telah ditentukan, maka akan muncul tampilan seperti gambar dibawah ini :

Gambar 6. Tampilan Lanjutan Eclipse

Langkah 2 : memilih Create a new Java project dan dilanjutkan pada langkah berikutnya.
Gambar 7 Tampilan Utama JRE (Java Runtime Environtment)

D2. Menulis Skrip Java

Langkah 1 : Menulis nama project sesuai ketentuan. Pastikan Use an execution environtment
JRE menunjukkan JavaSE-1.8 dan klik tombol Finish.

Gambar 8. Tampilan New Java Project

Langkah 2 : Langkah selanjutnya yaitu membuat class. Cara pertama yaitu memilih menu File,
selanjutnya New, lalu memilih Other. Cara ke-4 yaitu memilih Class dilanjutkan dengan memilih
Next. Cara selanjutnya yaitu menuliskan nama Class. Jangan lupa untuk centang Public static
void main (String[] args) lalu tekan tombol Finish seperti pada gambar di bawah ini :
Gambar 9. Tampilan New Java Class

Langkah 3 : Langkah selanjutnya yaitu menulis skrip pada 3 kelas, kelas pertama diberi nama
CINDYFATIKHA181110P11BinaryTree seperti dibawah ini :

public class CINDYFATIKHA181110P11BinaryTree {


public static void main(String[] args) {
// TODO Auto-generated method stub
BinaryTree tree = new BinaryTree();
TreeNode node;
node = new TreeNode(5);
tree.insert(node);
node = new TreeNode(3);
tree.insert(node);
node = new TreeNode(4);
tree.insert(node);
System.out.print("Traversal dengan preorder :");
tree.preOrder();
System.out.print("\nTraversal dengan inorder :");
tree.inOrder();
System.out.print("\nTraversal dengan postorder :");
tree.postOrder();
System.out.println();
}
}

Class kedua diberi nama TreeNode yang di isi dengan script seperti dibawah ini :

public class TreeNode {


int data;
TreeNode left;
TreeNode right;

public TreeNode(int data) {


this.data = data;
}
}
Class ketiga diberi nama BinaryTree yang di isi dengan script seperti dibawah ini :

public class BinaryTree {


TreeNode root;

public boolean isEmpty() {


return (root==null);
}

//method insert data


public void insert(TreeNode input) {
if(isEmpty()) {
root = input;
} else {
//cari parent yang sesuai dan (kiri/kanan)
TreeNode current = root;
TreeNode parent = null;
boolean diKiri = true;
while (current != null) {
parent = current;
//kalau data yang akan diinputkan lebih besar,
//bergerak ke kanan
if(current.data < input.data) {
current = current.right;
diKiri = false;
//else gerak ke kiri
} else if(current.data > input.data) {
current = current.left;
diKiri = true;
}else {
System.out.println("data"+input.data+" sudah
ada");
break;
}
}
//hubungkan ke parent
if (diKiri) {
parent.left = input;
} else {
parent.right = input;
}
}
}
public void preOrder() {
preOrder(root);
}
public void inOrder() {
inOrder(root);
}
public void postOrder() {
postOrder(root);
}

public void preOrder(TreeNode akar) {


if(akar != null) {
System.out.print(akar.data+" ");
preOrder(akar.left);
preOrder(akar.right);
}
}
public void inOrder(TreeNode akar) {
if(akar != null) {
inOrder(akar.left);
System.out.print(akar.data+" ");
inOrder(akar.right);
}
}
public void postOrder(TreeNode akar) {
if(akar != null) {
postOrder(akar.left);
postOrder(akar.right);
System.out.print(akar.data+" ");
}
}
//method mencari data
public TreeNode search(int key) {
TreeNode node = null;
TreeNode current = root;
//lakukan pencarian selama current bukan null
while (current != null) {
if (current.data == key) {
return node;
} else {
if (current.data < key) {
current = current.right;
} else {
current = current.left;
}
}
}
return node;
}
}

Langkah selanjutnya adalah me-run pada class CINDYFATIKHA181110P11BinaryTree maka


hasilnya seperti pada gambar dibawah ini :
E. PENANGANAN ERROR

1. Error pertama terjadi karena salah menuliskan skrip yang seharusnya “\n” saya tulis “/n”
sehingga saat di run tidak sesuai dengan contoh yang ada pada modul dan keluar seperti yang
ada di bawah ini :

Solusi : mengubah skrip yang salah diatas

2. Error kedua terjadi karena awal di tulis salah yaiu “dikiri” dan skrip dibawahnya di tulis
“diKiri” sehingga tidak sama dan muncul tanda error seperti dibawah ini :

Solusi : mengganti penulisan “dikiri” menjadi “diKiri”

F. PENYELESAIAN TUGAS

public class cindyfatikha181110T11 {

public static void main(String[] args) {

// TODO Auto-generated method stub

BinaryTree tree=new BinaryTree();

TreeNode node;

node = new TreeNode('a');


tree.insert(node);

node= new TreeNode('b');

tree.insert(node);

node= new TreeNode ('d');

tree.insert(node);

node= new TreeNode ('h');

tree.insert(node);

node= new TreeNode ('i');

tree.insert(node);

node= new TreeNode ('e');

tree.insert(node);

node= new TreeNode ('j');

tree.insert(node);

node= new TreeNode ('c');

tree.insert(node);

node= new TreeNode ('f');

tree.insert(node);

node= new TreeNode ('g');

tree.insert(node);

node= new TreeNode ('k');

tree.insert(node);

System.out.println("Traversal dengan preorder");

tree.preOrder();

System.out.println("\nTraversal dengan inorder:");

tree.inOrder();

System.out.println("\nTraversal dengan postorder:");


tree.postOrder();

System.out.println();

public class TreeNode {

char data;

TreeNode left;

TreeNode right;

public TreeNode (char data) {

this.data=data;

public class BinaryTree {

TreeNode root;

public boolean isEmpty() {

return (root==null);

//method insert data

public void insert(TreeNode input) {

if(isEmpty()) {

root=input;

}else {

//caari paremnt yang sesuai (kiri/kanan()

TreeNode current=root;
TreeNode parent=null;

boolean diKiri=true;

while (current !=null) {

parent=current;

//kalau data yang akan diinputkan lebih besar,

//bergerak ke kanan

if (current.data<input.data) {

current=current.right;

diKiri=false;

//else gerak ke kiri

}else if(current.data>input.data) {

current=current.left;

diKiri=true;

}else {

System.out.println("data"+input.data+"sudah
ada");

break;

//HUBUNGKAN KE PARENT

if (diKiri) {

parent.left=input;

}else {

parent.right=input;

}
public void preOrder() {

preOrder(root);

public void inOrder() {

inOrder(root);

public void postOrder() {

postOrder(root);

//fungsi rekursif

public void preOrder(TreeNode akar) {

if (akar !=null) {

System.out.print(akar.data+" ");;

preOrder(akar.left);

preOrder(akar.right);

public void inOrder(TreeNode akar) {

if (akar !=null) {

inOrder(akar.left);

System.out.print(akar.data+ " ");

inOrder(akar.right);

public void postOrder(TreeNode akar) {

if (akar !=null) {
postOrder(akar.left);

postOrder(akar.right);

System.out.print(akar.data+" ");

//,method mencari datra

public TreeNode search(int key) {

TreeNode node=null;

TreeNode current=root;

//lakukan pencarian selama current bukan null

while (current !=null) {

if (current.data==key) {

return node;

}else {

if (current.data<key) {

current=current.right;

}else {

current=current.left;

return node;

Anda mungkin juga menyukai