Binary Tree kosong Gambar 1. Binary Tree dalam kondisi kosong

dokumen-dokumen yang mirip
Politeknik Elektronika Negeri Surabaya

KUM 6 IMPLEMENTASI BINARY TREE

Silsilah keluarga Hasil pertandingan yang berbentuk turnamen Struktur organisasi dari sebuah perusahaan. B.1 Pohon Biner (Binary Tree)

Politeknik Elektronika Negeri Surabaya

Algoritma dan Struktur Data. Binary Tree & Binary Search Tree (BST)

Pohon dan Pohon Biner

Struktur Data Tree/Pohon dalam Bahasa Java

A. TUJUAN Mahasiswa diharapkan mampu : 1. Memahami Konsep Binary Search Tree 2. Mengimplementasaikan Binary Search Tree

Tree (Struktur Data) Nisa ul Hafidhoh, MT

Politeknik Elektronika Negeri Surabaya

IT234 Algoritma dan Struktur Data. Tree

DIKTAT KULIAH ALGORITMA dan STRUKTUR DATA II

TREE STRUCTURE (Struktur Pohon)

Binary Tree. Binary Tree dapat digambarkan berdasarkan kondisinya, sebagai berikut: Pointer ke akar (root) dari tree

Algoritma dan Struktur Data. Tree

ALGORITMA DAN STRUKTUR DATA

MODUL PRAKTIKUM STRUKTUR DATA

BAB XI Manipulasi Binary Tree

BAB IV POHON. Diktat Algoritma dan Struktur Data 2

TREE ALGORITMA & STRUKTUR DATA. Materi ASD Fakultas Teknik Elektro & Komputer UKSW ( Download Dari :

B C D E F G H I J K L M N O P Q R S T. Tinaliah, S.Kom POHON BINER

Pohon (Tree) Universitas Gunadarma Sistem Informasi 2012/2013

ANALISIS KECEPATAN STRUKTUR DATA LINKED LIST DAN TREE

Pohon Biner (Bagian 1)

13/12/2013. Binary Tree. Contoh Tree

2. Mahasiswa dapat membuat dan menggunakan array dan linked list dalam suatu kasus.

6. TREE / BINARY TREE

Tenia Wahyuningrum, S.Kom. MT Sisilia Thya Safitri, S.T.,M.T.

Binary Tree. Binary Tree dapat digambarkan berdasarkan kondisinya, sebagai berikut: Pointer ke akar (root) dari tree

BAB IX TREE (POHON) ISTILAH DASAR

Pertemuan 9 STRUKTUR POHON & KUNJUNGAN POHON BINER

Binary Search Tree (BST)

Kode MK/ Pemrograman Terstruktur 2. ZK Abdurahman Baizal. KK Algoritma dan Komputasi. Tree (Pohon)

Struktur Data & Algoritma

Tree. Perhatikan pula contoh tree di bawah ini : Level. Level 2. Level 3. Level 4. Level 5

BAB VII Tujuan 7.1 Deskripsi dari Binary Tree

Algoritma dan Struktur Data. Linear & Binary Search Tree

Buku Ajar Struktur Data

Implementasi Skema Pohon Biner yang Persistent dalam Pemrograman Fungsional

STRUKTUR POHON (TREE) Pohon atau Tree adalah salah satu bentuk Graph terhubung yang tidak mengandung sirkuit.

Soal Pendahuluan Modul 3

Struktur Data dan Algoritma

Pemrograman Algoritma Dan Struktur Data

STRUKTUR POHON & KUNJUNGAN POHON BINER

STRUKTUR POHON (TREE) Pohon atau Tree adalah salah satu bentuk Graph terhubung yang tidak mengandung sirkuit.

Ringkasan mengenai Tree (Dari beberapa referensi lain) Nina Valentika

DEFINISI. Pohon adalah graf tak-berarah terhubung yang tidak mengandung sirkuit. pohon pohon bukan pohon bukan pohon 2

STRUKTUR DATA. By : Sri Rezeki Candra Nursari 2 SKS

Definisi. Pohon adalah graf tak-berarah terhubung yang tidak mengandung sirkuit. pohon pohon bukan pohon bukan pohon

SATUAN ACARA PERKULIAHAN (SAP) Mata Kuliah : Struktur Data Kode : TIS3213 Semester : III Waktu : 2 x 3 x 50 Menit Pertemuan : 10 & 11

A B C E F G K Contoh Tree

HEAP. Heap dan Operasinya. Oleh Andri Heryandi

Everybody in this country should learn how to program a computer because it teaches you how to think. Steve Jobs

Pohon. Bahan Kuliah IF2120 Matematika Diskrit. Program Studi Teknik Informatika ITB. Rinaldi M/IF2120 Matdis 1

B. DASAR TEORI AlGORITMA TRAVERSAL GRAPH Terdapat beberapa perbedaan Tree dan Graph dijelaskan pada tabel Tabel 31.1 Perbedaan Tree dan Graph

Pohon (TREE) Matematika Deskrit. Hasanuddin Sirait, MT 1

Koleksi Hirarkis Tree

Matematika Diskret (Pohon) Instruktur : Ferry Wahyu Wibowo, S.Si., M.Cs.

BAB VII POHON BINAR POHON

POHON CARI BINER (Binary Search Tree)

Termilogi Pada Pohon Berakar 10 Pohon Berakar Terurut

Data Structure TREE & BINARY TREE. Chapter 5b. Dahlia Widhyaestoeti, S.Kom

Modul 4: Iteratif & Rekursif, Binary Tree

Silsilah keluarga Hasil pertandingan yang berbentuk turnamen Struktur organisasi dari sebuah perusahaan

BINARY SEARCH TREE. TUJUAN UMUM Mahasiswa memahami binary search Tree

Algoritma dan Struktur Data. Click to edit Master subtitle style Konsep Tree

Konsep Pohon (Tree) Binary Tree Penyajian Tree dengan Array Penyajian Tree dengan Linked List Metode Traversal (Kunjungan Node pada Tree)

Definisi. Pohon adalah graf tak-berarah, terhubung, dan tidak mengandung sirkuit. pohon pohon bukan pohon bukan pohon (ada sikuit) (tdk terhubung)

Syarif Abdullah (G )

Pohon Biner Bagian 2 (Pohon Seimbang, Pohon Biner Terurut, Pembangunan Pohon Biner dari Pita Karakter/String)

Praktikum Algoritma dan Setruktur Data

Lecture Notes On Algorithms and Data Structures. Oleh Thompson Susabda Ngoen

Pohon Biner dan Aplikasinya

Penerapan Pohon Untuk Memanipulasi dan Meritrieve Data

Penerapan Pohon Dalam Heap Sort

Ujian Tengah Semester Struktur Data dan Algoritma Fakultas Ilmu Komputer, Universitas Indonesia 9 November 2006

METODE AVL TREE UNTUK PENYEIMBANGAN TINGGI BINARY TREE

TREE. Definisi. Istilah-istilah Umum dalam Tree

MAKALAH DESAIN DAN ANALISIS ALGORITMA BINARY TREE DISUSUN OLEH : 1. Nadim Achmad ( ) 2. Dzurratul Ulya ( )

Membuat Binary Search Tree Menggunakan STL Vector C++

INFIX, POSTFIX, dan PREFIX Bambang Wahyudi

Organisasi Berkas Sekuensial Berindeks

STRUKTUR DATA. By : Sri Rezeki Candra Nursari 2 SKS

Kecerdasan Buatan. Penyelesaian Masalah dengan Pencarian... Pertemuan 02. Husni

ANALISIS ALGORITMA BINARY SEARCH

MODUL PRAKTIKUM STRUKTUR DATA DAN ALGORITMA LINKED LIST (BAGIAN 2)

Algoritma Pemrograman & Struktur Data

Pemodelan dan Pengelolaan Data Klasifikasi Tanaman Menggunakan Pohon

Gambar 1. Single Linked List

KUNJUNGAN PADA POHON BINER

Pohon (Tree) Contoh :

Single Linked List (1)

OPERASI LOGIKA PADA GENERAL TREE MENGGUNAKAN FUNGSI REKURSIF

Gambar 1. Single Linked List

Struktur dan Organisasi Data 2 POHON BINAR

Pohon Biner. Tim Pengajar IF2030 Semester I/ /8/2009 FNA/IF2030/Sem

Tipe Rekursif: POHON (TREE)

Bab 1 Pengantar Struktur Data

MODUL PRAKTIKUM STRUKTUR DATA Modul ke-1, Pertemuan ke-1 Nama file : P01-XXX (XXX adalah 3 digit terakhir NIM) Deskripsi: Senarai, Traversal

Penerapan BFS dan DFS dalam Garbage Collection

Transkripsi:

PRAKTIKUM 25-26 BINARY TREEDAN TRAVERSAL BINARY TREE A. TUJUAN Mahasiswa diharapkan mampu : 1. Memahami konsep dari BinaryTree dantraversalbinary Tree 2. Memahami proses traversal pada Binary Tree 3. Memahami perbedaan setiap traversal dan implementasinya B. DASAR TEORI Binary Tree adalah struktur data yang hampir mirip juga dengan Linked List untuk menyimpan koleksi dari data. Linked List dapat dianalogikan sebagai rantai linier sedangkan Binary Tree bisa digambarkan sebagai rantai tidaklinier. Binary Tree dikelompokkan menjadi unordered Binary Tree (tree yang tidak berurut) dan ordered Binary Tree (tree yang terurut). Binary Tree dapat digambarkan berdasarkan kondisinya, sebagai berikut Binary Tree kosong Gambar 1. Binary Tree dalam kondisi kosong Pointer ke akar (root) dari tree Gambar 2. Binary Tree berisi satu node yaitu root Binary Tree sebagai root sekaligus sebagai daun (leaf) 190

Gambaran dari Binary Tree yang terdiri dari 3 (tiga) node: Pointer ke root dari tree Leaf dari tree Node pada binary tree Gambar 3. Binary Tree Jumlah maksimum node pada setiap tingkat adalah 2 n Gambar 4. Jumlah Node di Binary Tree Node pada binary tree maksimum berjumlah 2 n -1 Algoritma Binary Tree Traversal Tiga teknik rekursif untuk binary tree traversals,yaitu: 1. Mengunjungi simpul akar (root), 2. Melakukan traversal subpohon kiri (left subtree), dan 3. Melakukan traversal subpohon kanan (right subtree). Yang membedakan antara teknik satu dengan yang lain adalah proses pengurutan tugas mereka. Proses traversal adalah proses melakukan kunjungan pada setiap node pada suatu binary tree tepat satu kali. Dengan melakukan kunjungan secara lengkap, maka akan 191

didapatkan urutan informasi secara linier yang tersimpan dalam sebuah binary tree. Terdapat tiga cara untuk melakukan kunjungan itu, yaitu: 1. Traversal preorder (depth first order) Dilaksanakan dengan jalan mencetak isi node yang dikunjungi lalu melakukan kunjungan ke subtree kiri dan selanjutnya ke subtree kanan. Algoritma umum traversal preorder adalah sebagai berikut: Jika tree kosong, maka keluar Proses node root. Traverse subtree kiri secara preorder. Traverse subtree kanan secara preorder. 2. Traversal inorder (symmetric order) Dilaksanakan dengan jalan melakukan kunjungan ke subtree kiri, mencetak isi node yang dikunjungi, lalu melakukan kunjungan ke subtree kanan. Algoritma umum traversal inorder adalah sebagai berikut: Jika tree kosong, maka keluar. Traverse subtree kiri secara inorder. Proses node root. Traverse subtree kanan secara inorder. 3. Traversal postorder Dilaksanakan dengan jalan melakukan kunjungan ke subtree kiri, lalu ke subtree kanan, dan selanjutnya mencetak isi node yang dikunjungi. Algoritma umum traversal inorder adalah sebagai berikut: Jika tree kosong, maka keluar. Traverse subtree kiri secara postorder. Traverse subtree kanan secara postorder. Proses node root. Semua algoritma traversal (preorder, inorder, postorder) yang diberikan di atas berupa algoritma rekursif, dan sebenarnya dapat dikerjakan secara iteratif dengan bantuan stack. 192

Contoh: diberikan ekspresi matematika ((A * B) - (C ^ D)) + (E / F), apabila digambarkan dalam bentuk binary tree. Apabila binary tree di atas dikunjungi: secara preorder akan menghasilkan: + - * A B ^ C D / E F secara inorder akan menghasilkan: A * C - C ^ D + E / F secara postorder akan menghasilkan: A B + C D ^ - E F / + C. TUGAS PENDAHULUAN Buatlah resume 1 halaman mengenai Binary Tree dan berikan penjelasannya.! D. PERCOBAAN Node.java 1. class Node { 2. 3. int idata; // data yang digunakan sebagai nilai kunci. 4. Node leftchild; // Simpul rujukan ke anak sebelah kiri. 5. Node rightchild; // Simpul rujukan ke anak sebelah kanan. 6. } BinaryTree.java 1. class BinaryTree { 2. 3. private Node root; // Membentuk akar (root) BinaryTree 4. 5. public Object find(int key) { 6. Node current = root; // Mulai dari akar (root) 7. while (current.idata!= key) // Selama tidak sesuai 8. { 9. if (key < current.idata) // Pergi ke cabang kiri? 10. { 11. current = current.leftchild; 12. } else { 13. current = current.rightchild; // Atau pergi ke cabang kanan. 14. } 15. if (current == null) // Jika tidak memiliki anak. 16. { 17. return null; 18. } 19. } 20. return current; // Data yang dicari ditemukan. 21. } 22. 23. public void insert(int id) { 24. { 193

25. Node newnode = new Node(); // Membuat Node yang akan disisipkan. 26. newnode.idata = id; // Menyisipkan data. 27. if (root == null) // Jika tidak ada Node di akar (root). 28. { 29. root = newnode; 30. } else { 31. Node current = root; // Mulai dari akar (root). 32. Node parent; 33. while (true) // hadir secara internal. 34. { 35. parent = current; 36. if (id < current.idata) // Pergi ke kiri. 37. { 38. current = current.leftchild; 39. if (current == null) // Akhir cabang kiri. 40. { // Sisipkan di kiri. 41. parent.leftchild = newnode; 42. return; 43. } 44. } // Akhir perjalanan ke kiri. 45. else // Atau pergi ke kanan. 46. { 47. current = current.rightchild; 48. if (current == null) // Akhir perjalanan cabang kanan. 49. { // Sisipkan di kanan. 50. parent.rightchild = newnode; 51. return; 52. } 53. } // Akhir perjalanan ke kanan. 54. } // Akhir while 55. } // Akhir bukan akar (root). 56. } // Akhir insert() 57. } 58. 59. public boolean delete(int id) { // (Asumsi pohon tidak kosong) 60. Node current = root; 61. Node parent = root; 62. boolean isleftchild = true; 63. while (current.idata!= id) // Mencari Node yang akan dihapus. 64. { 65. parent = current; 66. if (id < current.idata) // Pergi ke kiri? 67. { 68. isleftchild = true; 69. current = current.leftchild; 70. } else // Atau pergi ke kanan? 71. { 72. isleftchild = false; 73. current = current.rightchild; 74. } 75. if (current == null) // Akhir baris 76. { 77. return false; // Node yang dicari tidak ditemukan. 78. } 194

79. } // end while 80. // Node yang akan dihapus ditemukan. 81. // Jika Node tidak memiliki anak, hapus! 82. if (current.leftchild == null 83. && current.rightchild == null) { 84. if (current == root) // Jika Node yang dihapus merupakan akar (Node). 85. { 86. root = null; // Pohon biner menjadi kosong. 87. } else if (isleftchild) // Jika Node yang dihapus adalah anak sebelah kiri. 88. { 89. parent.leftchild = null; // Pemutusan koneksi. 90. } else // Jika Node yang akan dihapus adalah anak sebelah kanan. 91. { 92. parent.rightchild = null; 93. } 94. } // Jika tidak ada anak kanan, ganti dengan subpohon kiri. 95. else if (current.rightchild == null) { 96. if (current == root) { 97. root = current.leftchild; 98. } else if (isleftchild) // Anak sebelah kiri induk. 99. { 100. parent.leftchild = current.leftchild; 101. } else // Anak sebelah kanan induk. 102. { 103. parent.rightchild = current.leftchild; 104. } 105. } // Jika tak ada anak kiri, gantikan dengan subpohon sebelah kanan. 106. else if (current.leftchild == null) { 107. if (current == root) { 108. root = current.rightchild; 109. } else if (isleftchild) // Anak sebelah kiri induk. 110. { 111. parent.leftchild = current.rightchild; 112. } else // Anak sebelah kanan induk. 113. { 114. parent.rightchild = current.rightchild; 115. } 116. } else // Dua anak, gantikan dengan successor inorder. 117. { 118. // Mendapatkan successor Node untuk dihapus (current) 119. Node successor = getsuccessor(current); 120. // Menghubungkan induk Node saat ini ke successor. 121. if (current == root) { 122. root = successor; 123. } else if (isleftchild) { 124. parent.leftchild = successor; 125. } else { 126. parent.rightchild = successor; 127. } 128. // connect successor to current's left child 129. successor.leftchild = current.leftchild; 130. } // end else two children 195

131. // (successor tidak mempunyai anak sebwlah kiri) 132. return true; 133. } // end delete() 134. // Mengembalikan Node yang memiliki nilai terbesar berikuntnya setelah delnode, 135. // pergi ke anak kanan, kemudian turunan kiri anak sebalah kanan. 136. private Node getsuccessor(node delnode) { 137. Node successorparent = delnode; 138. Node successor = delnode; 139. Node current = delnode.rightchild; // Pergi ke anak sebelah kanan. 140. while (current!= null) // Hingga habis. 141. { // Anak kiri. 142. successorparent = successor; 143. successor = current; 144. current = current.leftchild; // Pergi ke anak sebelah kiri. 145. } 146. // Jika successor bukan anak seblah kanan. 147. if (successor!= delnode.rightchild) { // Buat hubungan. 148. successorparent.leftchild = successor.rightchild; 149. successor.rightchild = delnode.rightchild; 150. } 151. return successor; 152. } 153. //Mencari simpul (Node) yang memiliki nilai terkecil. 154. public Node minimum() { 155. Node current, last = null; 156. // Mulai dari akar (root). 157. current = root; 158. // Hingga dasar pohon biner. 159. while (current!= null) { 160. // Mencatat Node 161. last = current; 162. // Pergi ke anak kiri. 163. current = current.leftchild; 164. } 165. return last; 166. } 167. } // end class BinaryTree E. LATIHAN Latihan 1 : Buat class BinaryNode.java untuk mendefinisikan data member dari class binary Tree node. Latihan 2 : Buat class BinaryTree.java untuk mendefinisikan setiap method yang ada pada Binary Tree sesuai dengan berikut : public class BinaryTree<T> { private BinaryNode<T> root;//akar dari bst public BinaryTree() {...}//konstruktor 196

} public BinaryNode<T> insert(t x, BinaryNode<T> t) {...} public BinaryNode<T> remove(t x, BinaryNode<T> t) {...} public BinaryNode<T> find(t x, BinaryNode<T> t){...} public BinaryNode<T> findmin(binarynode<t> t) {...} public BinaryNode<T> findmax(binarynode<t> t) {...} public void preorder(...) {...} public void inorder(...) {...} public void postorder(...) {...} Latihan 3 : buat class TestBinaryTree,java untuk melakukan testing dari setiap method yang dibuat pada latihan 2. Latihan 4 : Modifikasi percobaan diatas dengan menambahkan operasi berikut: a. Menghitung jumlah/size node dalam tree. b. Menghitung height(kedalaman) tree. c. Mencari semua data pada node yang berposisi sebagai leaf(daun). F. LAPORAN RESMI Kerjakan hasil percobaan(d) dan latihan(e) di atas dan tambahkan analisa. 197