P. 1
Laporan 2

Laporan 2

|Views: 19|Likes:
Dipublikasikan oleh edi siswanto
BINARY TREE
BINARY TREE

More info:

Categories:Types, Reviews
Published by: edi siswanto on Mar 18, 2013
Hak Cipta:Attribution Non-commercial
Harga Terdaftar: $0.99 Beli Sekarang

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
See more
See less

11/19/2013

$0.99

USD

pdf

text

original

Laporan ke-3

BINARY TREE
Disusun untuk Memenuhi Laporan Praktikum Algoritma dan Struktur Data

Oleh: Nama NIM Hari/Tanggal : Edi Siswanto : 115090607111035 : 27 / November 2012

Asisten:

1. 2.

Dwi Saputro Ilham Yuliantoro

PRODI ILMU KOMPUTER
PROGRAM TEKNOLOGI INFORMASI DAN ILMU KOMPUTER

UNIVERSITAS BRAWIJAYA 2012

Dasar Teori Binary Tree adalah struktur data yang hampir mirip juga dengan Linked List untuk menyimpan koleksi dari data. Binary Tree dapat digambarkan berdasarkan kondisinya.A. . Linked List dapat dianalogikan sebagai rantai linier sedangkan Binary Tree bisa digambarkan sebagai rantai tidak linier. Binary Tree dikelompokkan menjadi unordered Binary Tree (tree yang tidak berurut) dan ordered Binary Tree (tree yang terurut). sebagai berikut: Gambaran dari Binary Tree terdiri dari 3 Node : Binary tree ini bukan merupakan linier linked list dimana masing masing nodenya menunjuk paling banyak 2 node yang lain.

B. public Node (int dt) { data=dt. Source Code Class Tree 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 package BAB8. class Node { int data. } private void preorder (Node node) { if (node==null) return.out. } public void sisipDtNode(int dtSisip) { if (root==null) root=new Node(dtSisip). else root. ". public Tree() { root=null. } else if (dtSisip>data) { if (nodeKanan==null) nodeKanan=new Node(dtSisip). else nodeKiri. Node nodeKanan.sisipDt(dtSisip).sisipDt(dtSisip). } public void inorderTraversal() { inorder(root).Random. preorder(node. preorder(node. import java. } } } public class Tree { private Node root.sisipDt(dtSisip). } public void preorderTraversal() { preorder (root).util. else nodeKanan. Node nodeKiri.printf ("%d. System. .nodeKiri). } public void sisipDt(int dtSisip) { if (dtSisip<data) { if(nodeKiri==null) nodeKiri=new Node(dtSisip).nodeKanan).data). nodeKiri=nodeKanan=null.node.

} public void postorder (Node node) { if (node == null) return. inorder(node. int b=tinggiPohon(node. else return b+1. } public int getNode () { return banyakNode(root).data).out. return jumlahnode.out. } public void postorderTraversal() { postorder(root).node.nodeKiri).47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 60 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 } private void inorder (Node node) { if (node==null) return. } //menghitung tinggi pohon private int tinggiPohon(Node node){ if(node==null) return -1. int jumlahnode=banyakNode(node.nodeKanan).printf ("%d.nodeKiri).nodeKanan). } } public int getBanyakDaun(){ return hitungDaun(root). postorder(node.node.nodeKanan).nodeKanan)+1.nodeKanan==null&&node. } //menghitung banyak daun public int hitungDaun(Node node) { if (node==null) return 0.nodeKiri==null){ return 1. }else{ return hitungDaun(node. inorder(node.data). ".nodeKiri) +banyakNode(node.nodeKiri). . } public int getTinggiPohon(){ return tinggiPohon(root). postorder(node. int a=tinggiPohon(node.nodeKanan). ".printf ("%d. System. if (node. if(a>b) return a+1.nodeKiri) +hitungDaun(node. } //menghitung jumlah node public int banyakNode(Node node) { if (node==null) return 0. System.

getBanyakDaun()).println("Sisip nilai data berikut : "). Tree. System.print("\n----------------------").out.print("-------------------------"). Tree.out.println("\nMenghitung Banyak Daun ").print("-------------------------").print("\n----------------------"). System.out. int nilai. System. ").print("-------------------------").sisipDtNode(nilai).postorderTraversal(). Tree. System. System.out. System.out.println("\nMenghitung Level Pohon "). } } .inorderTraversal().out.out.out.print(nilai +". System. } //method main program public static void main(String[] args){ Tree Tree= new Tree(). Tree. System.out. System.i<=10. System. System.99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 } //menghitung panjang level public int panjangLevel(){ return getTinggiPohon()-1. } System.out.out.println("\n\nPreorder Traversal").nextInt(100). System.println("Level Pohon : "+Tree.println("Banyak Daun : "+Tree. //sisipDt 10 bilangan acak dari 0-99 ke dalam tree for(int i=1.out.println("\nPostorder Traversal").out.println("\nMenghitung Jumlah Node "). System.println("\nMenghitung Tinggi Pohon ").print("-----------------------"). System. System.getTinggiPohon()).out.preorderTraversal().out.out.out. System. Random randomNumber=new Random(). System.out.println("\nInorder Traversal"). System.println("Jumlah Node: "+Tree.getNode()).println("Tinggi Pohon : "+Tree.panjangLevel()).print("\n----------------------"). System.out.out.i++){ nilai=randomNumber.

} Membuat class nodeCDLL public class CircularDoubleLinkedList { . Output D. NodeCDLL prev. next. Pembahasan class NodeCDLL { Object data.C.

maka akan menjalankan proses yang dicantumkan didalan proses else tersebut dan counter akan melakukan penambahan satu satu. //sisip data di awal public void sisipDataDiAwal(int dt) { NodeCDLL baru = new NodeCDLL().next = pAkhir.prev = baru. Class NodeCDLL mengacu pada tiap pointer data. if(pAwal == null) { baru. Pada proses ini terjadi seleksi jika data diposisi awal samadengan null.data = dt.data = data. pAwal. baru. baru.private NodeCDLL pAwal. counter++. } } Method untuk menyisipkan data di awal nodeCDLL.next = baru. } else { baru. pAwal = baru. pAkhir = null. baru. Pointer diinisialisasikan null semua untuk setiap atribut. //sisip data di akhir public void sisipDataDiAkhir(int data) { NodeCDLL baru = new NodeCDLL().prev = pAwal.prev = pAkhir. pAkhir. maka akan menjalankan perintah selanjutnya . } Konstruktor pada Class CircularDoubleLinkedList. counter=0. private int counter. pAkhir. baru. pAkhir = baru. begitupun dengan jika syarat pada proses seleksi ini tidak terpenugi. baru.prev = pAkhir. pAwal = baru. Atribut pada class CircularDoubleLinkedList.next = pAwal. //konstruktor public CircularDoubleLinkedList() { pAwal = null. baru.next = pAwal. .

} else { baru. hapus=null.next=pAwal. if(pAwal!=null) { hapus=pAwal. Pada method ini proses penghapusan akan berjalan jika data awal pada node tidak sama dengan null. baru. pAwal.next. pAwal=baru. counter--. baru. pAwal=pAwal. maka akan menjalankan perintah selanjutnya . pAwal.prev= pAkhir. pSblHapus.prev = pAwal. maka akan menjalankan proses yang dicantumkan didalan proses else tersebut dan counter akan melakukan penambahan satu satu. pAkhir = baru.next = pAkhir.next= pAwal. Pada proses ini terjadi seleksi jika data diposisi akhir samadengan null.next = pAwal. pSblHapus=pAwal. counter=0. counter++. } } Method untuk menyisipkan data diakhir nodeCDLL. baru. pAkhir.next = baru.if(pAkhir == null) { baru. } } Method ini digunakan untuk melakukan penghapusan data di awal nodeCDLL.prev = pAkhir. //hapus data public void hapusData(Object dtHapus){ if(pAwal!=null){ . begitupun dengan jika syarat pada proses seleksi ini tidak terpenugi. baru. pAkhir = baru. pSblHapus.prev = baru. //hapus data di awal public void hapusDataDiAwal() { NodeCDLL hapus.prev=pSblHapus.prev.

while(!ketemu && (i<=counter)&&(i != -1)){ if(pKini. Pada proses perulangan while ada beberapa ketentuan yang harus dipenuhi.equals(dtHapus)){ ketemu = true.counter--. boolean ketemu=false. pHapus=null. }else{ pSbl. . //hapus data di akhir public void hapusDataDiAkhir() { NodeCDLL hapus. Setelah proses while terpenuhi akan menjalankan proses seleksi yaitu variable ketemu tadi akan menjadi true.pKini=pAwal.next. int i = -1. pKini=pKini. if(pAwal != null) i=0. pSblHapus.NodeCDLL pSbl.data. hapus=null. while(pSblHapus. pSblHapus.next. pHapus=pKini. } if(ketemu){ if(pSbl==null){ pHapus=pAwal. pHapus.next. pSbl=null. Data yang dihapus ini merupakan data yang bertipe objek. } this. } i++.next=pAwal.next != pAwal){ pSblHapus = pSblHapus. Disini menginisialisasikan variable I dengan nilai -1 dan ada variable ketemu yang bertipe Boolean false. Dengan adanya seleksi jika data di awal node tidak sama dengan null akan pelakukan perulangan while. } hapus=pAwal. }else{ pSbl=pKini.next=pKini. pKini.next. counter--.next. } } } Method ini digunakan untuk melakukan penghapusan data sesuai yang diinginkan. pHapus=null. if(pAwal!=null) { pSblHapus = pAwal.

cdll.sisipDataDiAwal(8). cdll. while((i<counter)) { System.next tidak sama dengan data pada awal node akan melakukan proses penghapusan data yang dimaksud tersebut.cetak("\nCDLL Setelah Sisip Data Di Awal"). cdll.sisipDataDiAwal(70). int i=-1. cdll. } Method ini digunakan untuk mencatak data node yang akan diidikan sesuai dengan keinginan user.sisipDataDiAwal(9). cdll.sisipDataDiAwal(10).print(pCetak. cdll.println("NULL").cetak("CDLL Awal"). Method ini mempunyai parameter komentar dengan tipe data String. akan dilanjutkan dengan proses perulangan while dengan syarat jika pSbl data hapus . cdll. cdll. cdll. cdll.out. i++. pCetak=pCetak.data+"->"). Pada method ini terjadi proses seleksi jika data di awal tidak sama dengan null.sisipDataDiAwal(50). .sisipDataDiAwal(60).println(komentar). //method cetak public void cetak(String komentar) { System.sisipDataDiAwal(30).} } Method ini digunakan untuk melakukan penghapusan data yang berada pada akhir node.out.sisipDataDiAwal(20).sisipDataDiAwal(90). Pada method ini yang dicetak adalah data yang telah di set oleh user pada method main //method main public static void main(String[] args) { CircularDoubleLinkedList cdll = new CircularDoubleLinkedList(). } System.next.out.sisipDataDiAwal(19). cdll. NodeCDLL pCetak = pAwal. cdll.

cetak("\nCDLL Setelah Hapus Data Di Akhir").Method ini merupakan sebuah method terpenting dan yang harus ada. cdll.sisipDataDiAkhir(56). cdll. cdll.sisipDataDiAkhir(55).cetak("\nCDLL Setelah 90 DiHapus"). cdll. cdll. cdll. Syntax ini merupakan bagian dari metho main yang digunakan untuk memberikan data yang akan disisipkan pada akhir node kemudian mencetaknya. cdll. cdll. Lalu melakukan penyisipan data di awal node lalu melakukan proses pencetakan.cetak("\nCDLL Setelah Sisip Data Di Akhir"). Syntax ini juga merupakan bagian dari method main yang fungsinya untuk melakukan penghapusan data di awal.sisipDataDiAkhir(57).hapusData(90). .cetak("\nCDLL Setelah 8 DiHapus"). cdll. cdll.cetak("\nCDLL Setelah Hapus Data Di Awal"). cdll. Pada syntax diatas terdapat beberapa angka untuk melakukan set data diawal dengan mengambil fungsi dari method sisipDataDiAwal dan juga pemanggilan method cetak untuk melakukan pencetakan inputan nilai yang telah di set oleh user.hapusDataDiAwal().hapusDataDiAkhir(). di Akhir dan juga melakukan proses penghapusan data sesuai yang diinginkan oleh user. cdll.hapusData(8).

Pada dasarnya struktur data menunjuk ke node terdepan. . maka node terakhir selalu diperbaharui isi dan posisinya sesuai dengan operasi yang dilakukan terhadap list-nya.dimana setiap node memiliki 3 field. Pointer ini nantinya akan diubah dan dan operasi pada double linked list circular mirip dengan double linked list non circular. Hanya pada double linked list circular. 1 field menunjuk pointer sebelumnya (prev). serta sebuah field yang berisi data untuk node tersebut. Kesimpulan Circular Double Linked List adalah linked list dengan menggunakan pointer. yaitu 1 field pointer yang menunjuk pointer berikutnya (next).E.

You're Reading a Free Preview

Mengunduh
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->