0% found this document useful (0 votes)
16 views6 pages

Javadisrit

Uploaded by

Pop Adalah Pop
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
16 views6 pages

Javadisrit

Uploaded by

Pop Adalah Pop
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 6

import java.io.

*;
import java.util.*;

class Node
{
public int bilBulat;
public double bilPecah;
public Node anakKiri;
public Node anakKanan;
public void displayNode()
{
System.out.print('{');
System.out.print(bilBulat);
System.out.print(", ");
System.out.print(bilPecah);
System.out.print("} ");
}
}

class Pohon
{
private Node akar;

public Pohon()
{ akar = null; }

public Node cari(int kunci)


{
Node lihat = akar;
while(lihat.bilBulat != kunci)
{
if(kunci < lihat.bilBulat)
lihat = lihat.anakKiri;
else
lihat=lihat.anakKanan;
if(lihat == null)
return null;
}
return lihat;
}
public void tambah(int dataBulat, double dataPecah)
{
Node nodeBaru = new Node();
nodeBaru.bilBulat = dataBulat;
nodeBaru.bilPecah = dataPecah;
if(akar == null)
akar = nodeBaru;
else
{
Node lihat = akar;
Node induk;
while(true)
{
induk=lihat;
if(dataBulat < lihat.bilBulat)
{
lihat = lihat.anakKiri;
if(lihat == null)
{
induk.anakKiri = nodeBaru;
return;
}
}
else
{
lihat = lihat.anakKanan;
if(lihat == null)
{
induk.anakKanan = nodeBaru;
return;
}
}
}
}
}

public boolean hapus(int kunci)


{
Node lihat = akar;
Node induk = akar;
boolean isAnakKiri = true;
while(lihat.bilBulat != kunci)
{
induk = lihat;
if(kunci < lihat.bilBulat)
{
isAnakKiri = true;
lihat = lihat.anakKiri;
}
else
{
isAnakKiri = false;
lihat = lihat.anakKanan;
}
if(lihat == null)
return false;
}
if(lihat.anakKiri==null &&
lihat.anakKanan==null)
{
if(lihat == akar)
akar = null;
else if(isAnakKiri)
induk.anakKiri = null;
else
induk.anakKanan = null;
}
else if(lihat.anakKanan==null)
if(lihat == akar)
akar = lihat.anakKiri;
else if(isAnakKiri)
induk.anakKiri = lihat.anakKiri;
else
induk.anakKanan = lihat.anakKiri;
else if(lihat.anakKiri==null)
if(lihat == akar)
akar = lihat.anakKanan;
else if(isAnakKiri)
induk.anakKiri = lihat.anakKanan;
else
induk.anakKanan = lihat.anakKanan;
else
{
Node successor = getSuccessor(lihat);
if(lihat == akar)
akar = successor;
else if(isAnakKiri)
induk.anakKiri = successor;
else
induk.anakKanan = successor;
successor.anakKiri = lihat.anakKiri;
}
return true;
}

private Node getSuccessor(Node hapusNode)


{
Node successorInduk = hapusNode;
Node successor = hapusNode;
Node lihat = hapusNode.anakKanan;
while(lihat != null)
{
successorInduk = successor;
successor = lihat;
lihat = lihat.anakKiri;
}
if(successor != hapusNode.anakKanan)
{
successorInduk.anakKiri = successor.anakKanan;
successor.anakKanan = hapusNode.anakKanan;
}
return successor;
}

public void traverse(int traverseType)


{
switch(traverseType)
{
case 1: System.out.print("\nPreorder traversal: ");
preOrder(akar);
break;
case 2: System.out.print("\nInorder traversal: ");
inOrder(akar);
break;
case 3: System.out.print("\npostorder traversal: ");
postOrder(akar);
break;
}
System.out.println();
}

private void preOrder(Node subAkar)


{
if(subAkar != null)
{
System.out.print(subAkar.bilBulat + " ");
preOrder(subAkar.anakKiri);
preOrder(subAkar.anakKanan);

}
}

private void inOrder(Node subAkar)


{
if(subAkar != null)
{
inOrder(subAkar.anakKiri);
System.out.print(subAkar.bilBulat + " ");
inOrder(subAkar.anakKanan);
}
}

private void postOrder(Node subAkar)


{
if(subAkar != null)
{
postOrder(subAkar.anakKiri);
postOrder(subAkar.anakKanan);
System.out.print(subAkar.bilBulat + " ");
}
}

public void displayPohon()


{
Stack semuaTumpukan = new Stack();
semuaTumpukan.push(akar);
int jmlKosong = 32;
boolean isBarisKosong = false;
System.out.println("....................................................");
while(isBarisKosong==false)
{
Stack subTumpukan = new Stack();
isBarisKosong = true;
for(int j=0; j<jmlKosong; j++)
System.out.print(' ');
while(semuaTumpukan.isEmpty()==false)
{
Node temp = (Node)semuaTumpukan.pop();
if(temp != null)
{
System.out.print(temp.bilBulat);
subTumpukan.push(temp.anakKiri);
subTumpukan.push(temp.anakKanan);
if(temp.anakKiri != null ||
temp.anakKanan != null)
isBarisKosong = false;
}
else
{
System.out.print("--");
subTumpukan.push(null);
subTumpukan.push(null);
}
for(int j=0; j<jmlKosong*2-2; j++)
System.out.print(' ');
}
System.out.println();
jmlKosong /= 2;
while(subTumpukan.isEmpty()==false)
semuaTumpukan.push(subTumpukan.pop() );
}
System.out.println(".............................................");
}
}

class ApliPohon
{
public static void main(String[] args)
throws IOException
{
int nilai;
Pohon pohonBaru = new Pohon();
pohonBaru.tambah(50, 1.5);
pohonBaru.tambah(25, 1.2);
pohonBaru.tambah(75, 1.7);
pohonBaru.tambah(12, 1.5);
pohonBaru.tambah(37, 1.2);
pohonBaru.tambah(43, 1.7);
pohonBaru.tambah(30, 1.5);
pohonBaru.tambah(33, 1.2);
pohonBaru.tambah(87, 1.7);
pohonBaru.tambah(93, 1.5);
pohonBaru.tambah(97, 1.5);
while(true)
{
System.out.print("Ketik huruf pertama, ");
System.out.print("lihat, tambah, cari, hapus, atau kunjungan: ");
int pilih = getChar();
switch(pilih)
{
case 'l':
pohonBaru.displayPohon();
break;
case 't':
System.out.print("Masukkan nilai untuk tambah: ");
nilai = getInt();
pohonBaru.tambah(nilai, nilai + 0.9);
break;
case 'c':
System.out.print("Masukkan nilai to cari: ");
nilai = getInt();
Node hasil = pohonBaru.cari(nilai);
if(hasil != null)
{
System.out.print("Diperoleh : ");
hasil.displayNode();
System.out.print("\n");
}
else
System.out.print("Tidak bida ditemukan ");
System.out.print(nilai + '\n');
break;
case 'h':
System.out.print("Masukkan nilai untuk dihapus: ");
nilai = getInt();
boolean didDelete = pohonBaru.hapus(nilai);
if(didDelete)
System.out.print("Dihapus " + nilai + '\n');
else
System.out.print("Tidak bisa dihapus ");
System.out.print(nilai + '\n');
break;
case 'k':
System.out.print("Masukkan angka 1, 2 atau 3: ");
nilai = getInt();
pohonBaru.traverse(nilai);
break;
default:
System.out.print("Salah memasukkan huruf \n");
}
}

public static String getString() throws IOException


{
InputStreamReader isr = new InputStreamReader
(System.in);
BufferedReader br = new BufferedReader(isr);
String s = br.readLine();
return s;
}

public static char getChar() throws IOException


{
String s = getString();
return s.charAt(0);
}

public static int getInt() throws IOException


{
String s = getString();
return Integer.parseInt(s);
}
}

You might also like