Anda di halaman 1dari 5

package BinaryTreel.

modul;
import java.util.Random;
import java.util.Scanner;
public class BinaryTree {
// atribut
static Integer[] x; // deklarasi tipe data array untuk menyimpan data pada t
ree
static int last = 0; // posisi array terakhir(indeks array)
public int size = 0; //ukuran awal, default
int array = 1; //deklarasi dan inisialisasi variabel
int bantuLevel = 1; //deklarasi dan inisialisasi variabel
//method cetak mencetak elemen pada x[i]
public void cetak(int i) {
System.out.print(x[i]+" ");
}
//inorder traversal
public void inOrder(Integer[] theArray, int theLast) {
x = theArray;//inisialisasi variabel
last = theLast;
if (!isEmpty()) {//jika data kosong
//memulai rekursi method theInOrder pada root
theInOrder(1);
} else {
System.out.println("Binary Tree Kosong");
}
}
public void theInOrder(int i) {// traverse subtree(sebagai root) pada x[i]
if (i <= last && x[i] != null) {// jika data root lebih kecil dari data
terakhir dan root tidak null
theInOrder(2 * i); //subtree kiri(indeks data genap)
cetak(i); //memanggil method cetak(untuk mencetak data), dengan para
meter i
theInOrder(2 * i + 1); //subtree kanan(indeks data ganjil)
}
}
public boolean isEmpty() {///method ini digunakan mengembalikan nilai untuk
data kosong
return (size == 0);
}
public void sisipDt(int data, int x) {//method menambah data
array = x;//inisialisasi
if (this.x[1] == null) {//jika data kosong
this.x[1] = new Integer(data);//membuat object baru berisi data disi
sipkan pada indeks ke-1(data pertama)
} else {
if (data < this.x[array].intValue()) {//jika data yang disisipkan le
bih kecil dari data pada variabel x indeks ke-array(diset 1)
if (this.x[array * 2] == null) {//jika data pada x indeks ke-arr
ay dikali 2 bernilai null/kosong
this.x[array * 2] = new Integer(data);//membuat object baru
ang berisi data disimpan pada variabel x indeks ke-array*2

size++;//ukuran bertambah 1
if (array * 2 > last) {//jika indeks array*2 lebih besar dar
i last
last = array * 2;//maka last = indeks array*2
}
} else {
array = array * 2;//array*2
sisipDt(data, array);//rekursif method sisipDt dengan parame
ter data, array
}
} else if (data > this.x[array].intValue()) {//jika data yang disisi
pkan lebih besar dari data pada variabel x indeks ke-array(diset 1)
if (this.x[array * 2 + 1] == null) {//jika data pada variabel x
indeks ke array*2+1 kosong
this.x[array * 2 + 1] = new Integer(data);//membuat object b
aru yang berisi data yang disisipkan
size++;//size bertambah 1
if (array * 2 + 1 > last) {//jika data yang disisipkan lebih
besar dari data last
last = array * 2 + 1;//sisip data pada node kanan
}
} else {
array = array * 2 + 1;
sisipDt(data, array);//memanggil method sisipDt dengan param
eter
}
}
}
}
public void buatNode(int i, int isi) {//method ini digunakan untuk membuat n
ode baru
x[i] = new Integer(isi);//membuat object baru pada data pertama
size++;//size +1
last = i;//data pertama menjadi data terakhir
}
public void preOrder(Integer[] theArray, int theLast) {
// set static data members
x = theArray;
last = theLast;
if (!isEmpty()) {//jika data tidak kosong
PreOrder(1);//rekursif method PreOrder dengan parameter 1
} else {
System.out.println("Binary Tree Kosong");
}
}
public void PreOrder(int i) {// cetak data secara preorder
if (i <= last && x[i] != null) {// jika data tidak kosong
cetak(i); // memanggil method cetak(untuk mencetak)dengan parameter
i
PreOrder(2 * i); // sisip ke indeks data genap (node kiri)
PreOrder(2 * i + 1); // sisip ke indeks data ganjil (node kanan)
}
}
public void postOrder(Integer[] theArray, int theLast) {

// set static data members


x = theArray;
last = theLast;
if (!isEmpty()) {
// start the recursive traversal method at the root
PostOrder(1);//rekursif method PreOrder dengan parameter 1
} else {
System.out.println("Binary Tree Kosong");
}
}
public void PostOrder(int i) {// cetak data secara postorder
if (i <= last && x[i] != null) {// jika data tidak kosong
PostOrder(2 * i); // sisip ke indeks data genap (node kiri)
PostOrder(2 * i + 1); // sisip ke indeks data ganjil (node kanan)
cetak(i); // memanggil method cetak(untuk mencetak)dengan parameter
i
}
}
public int BanyakNode() {//method ini digunakan untuk menghitung banyak data
int jumlahNode = 0;//inisialisasi data masih kosong
for (int i = 1; i <= last; i++) {//perulangan jumlah data bertambah, ind
eks i++
if (x[i] != null) {//jika data ppada indeks i tidak kosong
jumlahNode++;//nila dari jumlahnode bertambah 1
}
}
return jumlahNode;//mengembalikan nilai jumlahnode
}
public int BanyakDaun() {//method ini digunakan untuk menghitung banyakdaun
int jumlahDaun = 0;
for (int i = 1; i <= last; i++) {//perulangan jumlah data bertambah, ind
eks i++
if (x[i] != null && x[i * 2] == null && x[i * 2 + 1] == null) {//jik
a data pada node kiri dan node kanan tidak kosong
jumlahDaun++;//jumlahdaun+1
}
}
return jumlahDaun;//mengembalikan nilai jumlah daun
}
public int Tinggi() {//method ini digunakan digunakan untuk mengetahui tingg
i node
int temp = last;//deklarasi dan inisialisasi variabel
int tinggi = -1;//inisalisasi variabel
while (x[temp] != null) {//perulangan data indeks ke - temp tidak kosong
temp /= 2;
tinggi++;//tinggi +1
}
return tinggi;//mengembalikan nilai tinggi
}
public int Panjang(int node) {//untuk menentukan panjang level
Integer temp = x[1];//deklarasi dan inisialisasi variabel
int level = -1;//deklarasi dan inisialisasi variabel

while (temp != null) {//jika temp tidak bernilai kosong


if (node == temp.intValue()) {
if (temp != null) {
level++;//level +1
return level;
}
} else if (node < temp.intValue()) {//jika node lebih kecil dari dat
a indeks temp
bantuLevel = bantuLevel * 2;//bergeser ke node kiri
temp = x[bantuLevel];
if (temp != null) {
level++;
}
} else if (node > temp.intValue()) {//jika node lebih kecil dari dat
a indeks temp
bantuLevel = bantuLevel * 2 + 1;//bergeser ke node kanan
temp = x[bantuLevel];
if (temp != null) {
level++;
}
}
}
return -1;
}
public static void main(String[] args) { // method main
Scanner input = new Scanner(System.in);
x = new Integer[1000];//membuat object baru dengan panjang data pada arr
ay 1000
BinaryTree tArray = new BinaryTree();
int nilai;
Random ramdomNumber = new Random();//memanggil class random yang sudah d
isediakan oleh java, untuk mengacak data angka
System.out.println("-------------------------------------------\n");
System.out.println("sisip nilai data berikut : ");
//sisip Dt 10 bilangan acak dari 0-99 ke dalam tree
for (int i = 1; i <= 10; i++) {
nilai = ramdomNumber.nextInt(100);//inisialisasi nilai acak dari 1 h
ingga 100
System.out.print(nilai + " ");
tArray.sisipDt(nilai, 1);//memanggil method sisipDt dengan parameter
, untuk sisip data
}
System.out.println("\n-------------------------------------------");
System.out.println("\nPreOrder Tranversal :");
tArray.preOrder(x, last);//memanggil method preOrder untuk cetak data se
cara preorder
System.out.println("\n-------------------------------------------");
System.out.println("\nInOrder Tranversal : ");
tArray.inOrder(x, last);//memanggil method inOrder untuk cetak data seca
ra inorder
System.out.println("\n-------------------------------------------");
System.out.println("\nPostOrder Tranversal : ");
tArray.postOrder(x, last);//memanggil method postOrder untuk cetak data
secara postorder
System.out.println("\n-------------------------------------------");
System.out.println("");
System.out.print("masukkan data yang ingin anda cari letak levelnya : ")

;
int cariLevel = input.nextInt();//deklarasi dan inisialisasi variabel, d
engan inputan dari user
int level = tArray.Panjang(cariLevel);//deklarasi dan inisialisasi varia
bel, dengan memamnggil method Panjang dengan parameter data yang akan dicari let
ak levelnya
if (level == -1) {
System.err.println("Data Tidak Ada\n");
} else {
System.out.println(cariLevel + " berada pada level : " + level);//me
manggil method level untuk mengetahui letak level data yang dicari letak levelny
a
}
System.out.println("banyak node pada tree : " + tArray.BanyakNode());//m
emanggil method BanyakNode untuk mengetahui banyak node dalam tree
System.out.println("banyak daun pada tree : " + tArray.BanyakDaun());//m
emanggil method BanyakDaun untuk mengetahui banyak daun dalam tree
int tinggiPohon = tArray.Tinggi();//deklarasi dan inisialisasi variabel,
memanggil method tinggi
if (tinggiPohon == -1) {
System.out.println("Binary Tree Kosong");
} else {
System.out.println("Tinggi pohon : " + tinggiPohon);//memanggil meth
od tinggiPohon untuk mengetahui tinggi tree
}
System.out.println();
}
}

Anda mungkin juga menyukai