1. Apa yang dimaksud dengan tree? PENGERTIAN TREE Kumpulan node yang saling terhubung satu sama lain dalam suatu kesatuan yang membentuk layakya struktur sebuah pohon. Struktur pohon adalah suatu cara merepresentasikan suatu struktur hirarki (one-to-many) secara grafis yang mirip sebuah pohon, walaupun pohon tersebut hanya tampak sebagai kumpulan node-node dari atas ke bawah. Suatu struktur data yang tidak linier yang menggambarkan hubungan yang hirarkis (one-tomany) dan tidak linier antara elemen-elemennya. Suatu tree dengan syarat bahwa tiap node hanya boleh memiliki maksimal dua subtree dan kedua subtree tersebut harus terpisah. Tiap node dalam binary tree hanya boleh memiliki paling banyak duachild. 2. Sebutkan dan jelaskan unsur-unsur pembentuk tree! Jelaskan istilah-istilah dalam tree! UNSUR-UNSUR PEMBENTUK TREE Dalam ilmu komputer, tree adalah sebuah struktur data yang secara bentuk menyerupai sebuah pohon, yang terdiri dari serangkaian node (simpul) yang saling berhubungan. Nodenode tersebut dihubungkan oleh sebuah vektor. Setiap node dapat memiliki 0 atau lebih node anak (child). Sebuah node yang memiliki node anak disebut node induk (parent). Sebuah node anak hanya memiliki satu node induk. Sesuai konvensi ilmu komputer, tree bertumbuh ke bawah, tidak seperti pohon di dunia nyata yang tumbuh ke atas. Dengan demikian node anak akan digambarkan berada di bawah node induknya. Node yang berada di pangkal tree disebut node root (akar), sedangkan node yang berada paling ujung pada piramida tree disebut node leaf (daun). NODE ROOT Node root dalam sebuah tree adalah suatu node yang memiliki hiarki tertinggi dan dapat juga memiliki node-node anak. Semua node dapat ditelusuri dari node root tersebut; Node root adalah node khusus yang tercipta pertama kalinya; Node-node lain di bawah node root saling terhubung satu sama lain dan disebut sub-tree. 1
NODE LEAF Merupakan bagian dari sub-tree; Letakaknya dibawah dari hierarki node root, dapat terletak ditengah atau berada paling bawah sekali. Pohon biner adalah sebuah tree yang pada masing-masing simpulnya hanya dapat memiliki maksimum 2 (dua) simpul anak. Tidak boleh lebih. Pada pohon biner, umumnya kedua node anak disebut dengan posisinya, yaitu kiri dan kanan. ISTILAH DALAM TREE - Size (ukuran): jumlah total node yang terdapat pada pohon biner tersebut. - Depth (kedalaman): panjang jalur yang menghubungkan sebuah node sampai ke node anaknya yang paling ujung (leaf). Depth biasa juga disebut height. 2
Ancestor (F) = C,A Descendant (C) = F,G Parent (D) = B Child (A) = B,C Sibling (F) = G Size = 7 A B C D E F G Height = 3 Root = A Leaf = D,E,F,G Degree (C) = 2 3. Sebutkan dan jelaskan macam-macam bentuk tree yang Anda ketahui! JENIS-JENIS TREE Binary Tree Suatu tree dengan syarat bahwa tiap node hanya boleh memiliki maksimal dua subtree dan kedua subtree tersebut harus terpisah. Tiap node dalam binary tree hanya boleh memiliki paling banyak dua child. Jenis Binary Tree I. Full Binary Tree (Pohon Biner Penuh) adalah pohon biner yang setiap nodenya pasti memiliki 0 atau 2 node anak. Semua node (kecuali leaf) pasti memiliki 2 anak dan tiap subtree memiliki panjang path yang sama. Almost Complete Binary Tree (Pohon Biner Hampir Lengkap) adalah pohon biner yang setiap nodenya dapat memiliki 0 node anak, atau memiliki kiri, atau jika memiliki kanan harus memiliki kiri. Tidak boleh memiliki kanan saja. 3
Complete Binary Tree (Pohon Biner Lengkap), mirip dengan full binary tree, tapi tiap subtree boleh memiliki panjang path yang berbeda dan tiap node (kecuali leaf) memiliki 2 anak. Skewed Binary Tree merupakan binary tree yang semua nodenya (kecuali leaf) hanya memiliki satu anak. II. AVL tree, merupakan tree yang mempunyai ketentuan sebagai berikut : a. The height of the left and right subtrees of the root are equal b. The left and right subtrees of the root are perfectly balanced binary trees An AVL tree (or height-balanced tree) is a binary search tree such that: The height of the left and right subtrees of the root differ by at most 1 The left and right subtrees of the root are AVL trees 4
4. Jelaskan macam-macam node transversal (Jelaskan dengan gambar)! Pre-Order Kunjungi node Kunjungi left child Kunjungi right child In-Order Kunjungi left child Kunjungi node Kunjungi right child Pos-Order Kunjungi left child Kunjungi right child Kunjungi node Pre-Order : A-B-D-C-E-F In-Order : B-D-A-E-C-F Pos-Order : D-B-E-F-C-A Inorder Traversal : 1+2*3 PreOrder Traversal : +1*23 PostOrder Traversal : 123*+ 5
5. Lakukan tranversal pada binary tree berikut ini! Preorder Inorder Posorder 6. Representasikan binary node dalam java! import java.util.*; public class binarytreetest { public static void main(string[] args) { System.out.println("Implementasi Binary Tree"); new binarytreetest().run(); static class Node { Node left; Node right; int value; public Node(int value) { this.value = value; public void run() { // build the simple tree from chapter 11. Node root = new Node(5); System.out.println("Nilai root : " + root.value); insert(root, 1); insert(root, 8); insert(root, 6); insert(root, 3); insert(root, 9); insert(root, 20); insert(root, 2); System.out.println("Traversing tree secara in order"); printinorder(root); System.out.println("Traversing tree dari depan ke belakang"); printfronttoback(root, 7); public void insert(node node, int value) { if (value < node.value) { if (node.left!= null) { insert(node.left, value); 6
dari " kanan dari " else { System.out.println(" Diinsertkan " + value + " ke kiri + node.value); node.left = new Node(value); else if (value > node.value) { if (node.right!= null) { insert(node.right, value); else { System.out.println(" Diinsertkan " + value + " ke + node.value); node.right = new Node(value); public void printinorder(node node) { if (node!= null) { printinorder(node.left); System.out.println(" Tranversalnya : " + node.value); printinorder(node.right); /** * uses in-order traversal when the origin is less than the node's value * * uses reverse-order traversal when the origin is greater than the node's * order */ public void printfronttoback(node node, int camera) { if (node == null) return; if (node.value > camera) { // print in order printfronttoback(node.left, camera); System.out.println(" Tranversalnya : " + node.value); printfronttoback(node.right, camera); else if (node.value < camera) { // print reverse order printfronttoback(node.right, camera); System.out.println(" Tranversalnya : " + node.value); printfronttoback(node.left, camera); else { // order doesn't matter printfronttoback(node.left, camera); printfronttoback(node.right, camera); 7
7. Jelaskan implementasi Huffman Algoritma dan kegunaannya! IMPLEMENTASI Sebagai contoh, misalnya kita mempunyai pesan A B A C C D A yang coba kita ubah dengan menggunakan kode Huffman, maka kodenya secara binary biasa adalah dimana pengkodean ini memerlukan 14 bit. Bandingkan jika kita melakukan pegkodean dengan menggunakan algoritma Huffman berikut, yang hanya memerlukan 13 bit, atau satu bit lebih pendek. Adapun cara mendapatkan kode Huffman-nya adalah sebagai berikut, I. Urutkan simbol-simbol pesan yang kita miliki, kemudian cacah berapa banyak frekuensi kemunculannnya, II. Gabungkan 2 buah symbol yang mempunyai jumlah frekuensi yang terendah (dalam contoh ini, adalah karakter B dan D yang sama-sama memiliki frekuensi kemunculan 1) III. Ulangi kembali proses pada langkah II (yakni karakter C dan BD ). 8
IV. Kembali ulangi proses diatas, sampai akhirnya kita mendapatkan gabungan dari keseluruhan symbol yakni, ACDB yang mempunyai frekuensi 7 V. Implementasikan symbol ACDB kedalam Huffman tree ACDB :7 A:3 CDB:4 C:2 DB:2 B:1 D:1 VI. Setiap cabang kekiri bernilai 0 dan cabang kekanan bernilai 1 VII. Sehingga didapat kode : A = 0 C = 10 B = 110 D = 111 KEGUNAAN Huffman Algoritma merupakan salah satu algoritma yang berguna untuk melakukan kompresi pada suatu file, atau data yang berupa bit-bit kode sehingga data yang direpresentasikan menjadi lebih sederhana. 9