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) {
;
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();
}
}