Struktur Data Departemen Ilmu Komputer FMIPA-IPB 2009 Pertemuan 7 TREE Struktur Data Departemen Ilmu Komputer FMIPA-IPB 2009
Tree : Struktur data berhirarkhi Vs Pohon Bener Pohon Biner Akar Cabang Daun Tree : Struktur data berhirarkhi
Why Tree ? Ada problem yang secara alamiah memang berhirarki : Ketua silsilah, kepengurusan organisasi, taksonomi, dsb Pengorganisasian informasi atau data : data / informasi global dibagi-bagi berdasarkan tingkatannya Memudahkan pengambilan dan penyusunan informasi (proses retrieve data) : secara linier ketua, bendahara, sekretaris1, ketua seksi, anggota seksi, dll……. secara hirarkhi Ketua Bendahara Sekretaris Ketua Seksi
Modus Penggunaan Tree Modus Struktur Tetap Modus Struktur Dinamis Sejak awal sampai akhir program tetap (hampir tidak mengalami perubahan jika mengalami tidak terlalu penting karena tidak merubah susunan). Contoh : Pohon Silsilah Modus Struktur Dinamis Senantiasa berubah dari awal sampai akhir program (perlu dilengkapi dengan fasilitas untuk menangani perubahan susunan) Modus Penggunaan Tree
Terminologi Tree A D B C E F G Tree Sejumlah node yang berhubungan secara hirarkis dimana node-node pada hirarki lebih rendah merupakan cabang dari node dengan hirarki yang lebih tinggi Root Node dari suatu tree yang memiliki hirarki paling tinggi Leaf Node yang tidak mempunyai cabang Inner Node yang bukan leaf Edge Penghubung antara dua buah node A D B C E F G
Terminologi Tree A D B C E F G Predecessor Node yang berada di atas node tertentu Successor Node yang berada di bawah node tertentu Ancestor/nenek moyang Seluruh node yang terletak sebelum node tertentu pada jalur yang sama Descendant/Keturunan Seluruh node yang terletak sesudah node tertentu pada Parent (ayah) Node pada hirarki langsung diatas node tersebut (predecessor satu level) Child Node pada hirarki langsung dibawah node tersebut (successor satu level) A D B C E F G
Terminologi Tree A D B C E F G Sibling Node-node yang satu ayah, sehingga berlevel sama. Dikenal juga istilah sibling yang tepat di kanan dan sibling yang tepat di kiri Subtree Bagian dari tree berupa suatu node beserta descendantnya Size Banyaknya node dalam suatu tree Level (Depth) Hirarki suatu node. Root berhirarki 0, node dibawahnya berhirarki 1 dan seterusnya. Height Selisih hirarki dari level terendah ke level tertinggi/nomor level leaf terbawah. A D B C E F G
Terminologi Tree A D B C E F G Depth/Kedalaman Jumlah edge dari root sampai dengan node tersebut Degree Banyaknya child dari suatu node Forest Himpunan dari sejumlah tree
Binary Tree Tree dengan cabang tidak lebih dari dua (hanya 0, 1, atau 2). Tree dengan seluruh innernya paling banyak berderajat 2. Cabang-cabang binary tree dibedakan menjadi cabang kiri dan cabang kanan. Jika hanya dijumpai satu cabang, harus ditentukan, cabang kiri atau kanan. Complete binary tree, full binary tree, perfect binary tree, skewed binary tree
Full Binary Tree Binary tree yang : Setiap node memiliki tepat 0 atau 2 child
X √ √ Complete Binary Tree Binary tree yang : Setiap leaf memiliki depth n or n-1 Setiap leaf pada depth n / pada level terendah merapat ke kiri X √ √
Perfect Binary Tree Binary tree yang : Setiap inner memiliki tepat dua child Setiap leaf terletak pada depth yang sama
Skewed Binary Tree Binary tree yang semua nodenya kecuali leaf hanya memiliki satu child
Representasi Binary Tree Menggunakan pointer Data Bentuk paling sederhana (one-way) Data Bentuk 2-way Data Bentuk yang lebih lengkap
Representasi dengan Array CBT dan PBT dapat diimplementasikan dalam array Penomoran pada node-nodenya bersifat terurut dan tidak ada yang kosong (melompat). A B I J K C D E F G H 5 4 3 2 1 6 7 8 9 10 Dalam Array A B I C F G J K D E H 1 2 3 4 5 6 7 8 9 10
Representasi dengan Array Contoh beberapa hubungan struktural representasi array : Mendapatkan anak dari suatu node : Anak kiri dari node I : I 2I + 1 Anak kanan dari node I : I 2I + 2 Mendapatkan ayah dari suatu node : Ayah dari node I : I [(I-1)/2] Sibling dari node ke I : I node genap : I-1 I node ganjil : I+1
Traversal / Kunjungan Traversal : Mengunjungi setiap node pada tree Ada tiga cara mengunjungi node-node pada suatu tree : Preorder : root, kiri, kanan Inorder : kiri, root, kanan Postorder : kiri, kanan, root Note : You may ``pass through'' a node as many times as you like but you must only process the node once.
Preorder : root, kiri, kanan B D C E F G A B D C E F G H A B D E C F G A B D G H C E F
Inorder : kiri, root, kanan B D C E F G H B G D H A E C F
Postorder : kiri, kanan, root B D C E F G H G H D B E F C A
Pre-Order: A-B-D-C-E-F In-Order: B-D-A-E-C-F Post-Order: D-B-E-F-C-A Try This One ! A B C D E F Pre-Order: A-B-D-C-E-F In-Order: B-D-A-E-C-F Post-Order: D-B-E-F-C-A
HEAPTREE Suatu node dikatakan heapordered jika : Nilai pada node tersebut lebih besar sama dengan atau lebih kecil sama dengan nilai child dibawahnya. Lebih kecil sama dengan dan lebih besar sama dengan tergantung dari definisi prioritas. (yang kecil atau yang besar yang diprioritaskan). Suatu tree dikatakan Heaptree Jika tree tersebut binary, complete dan seluruh nodenya heapordered. Binary: Setiap node paling banyak memiliki dua child. Complete: Setiap leaf memiliki depth n or n-1, dan setiap leaf pada depth n / pada level terendah merapat ke kiri. Tidak ada penomoran yang melompat. Heapordered: Setiap node terorganisasi berdasarkan suatu ketentuan prioritas
OPERASI HEAPTREE 10 9 8 5 2 7 1 4 6 3 Operasi Penghapusan Operasi Penghapusan Penghapusan dilakukan pada root. Move node dengan indeks terbesar ke root. Reheapify dari atas. Operasi Penyisipan Penyisipan dilakukan pada indeks terbesar. Reheapify dari bawah.
Penghapusan pada Heaptree I 1 9 2 8 3 4 6 7 5 5 2 6 1 4 8 3 9 7 3 9 8 5 2 7 1 4 6 II
Penghapusan pada Heaptree 9 3 8 5 2 7 1 4 6 III 9 7 8 5 2 3 1 4 6 IV
Penghapusan pada Heaptree 9 V 1 7 2 8 3 4 4 6 5 5 2 6 7 1 3 8 Bentuklah sebuah heap tree dari masukan berikut : 2, 4, 5, 7, 3, 10, 8, 1, 9, 6 dengan prioritas pada nilai yang lebih besar !
Binary Search Tree Binary Search Tree adalah binary tree dimana node-node dari tree berisi nilai yang sudah terurut sebagai berikut : Key node subtree kiri < key dari root < key node subtree kanan 18 10 5 23 14 21 33
Binary Search Tree Insertion Key node subtree kiri < key dari root < key node subtree kanan Insert ke dalam BST yang masih kosong masukan berikut : 12, 15, 13, 9, 5, 11, 20 ! 12 9 15 13 20 5 11 1 6 4 3 2 7
Binary Search Tree Deletion 10 6 13 2 8 12 19 1 7 14 15 16 Langkah penghapusan node : Tentukan lokasi node yang mengandung nilai yang akan dihapus. Lihat jumlah child : 0, 1 atau 2
Binary Search Tree Deletion 10 6 13 2 8 12 19 1 7 14 15 16 Child=0 leaf Hapus : 16 X X X Jika node yang dihapus adalah leaf, maka langsung hapus X
Binary Search Tree Deletion Child=1, kiri atau kanan 10 6 13 2 8 12 19 1 7 14 15 16 Hapus 14 X X Jika node yang dihapus mempunyai satu child kiri atau kanan, maka anak itu akan menempati posisi parentnya
Binary Search Tree Deletion 10 13 6 2 7 12 19 15 1 16
Binary Search Tree Deletion X Child=2, kiri dan kanan Hapus 10 10 6 13 2 8 12 19 1 7 14 15 16
Binary Search Tree Deletion Jika node yang dihapus punya dua child, gantikan posisinya dengan node terbesar yang ada pada subtree kiri. How to find the biggest element in left subtree? Go to the root of the left sub-tree and keep following right pointers until there are no more right pointers to be followed Atau gantikan posisi node yang dihapus itu dengan predecessor inordernya.
Binary Search Tree Deletion 8 6 13 2 7 12 19 1 14 15 16
Kekurangan Binary Search Tree Input : 10, 15, 25, 17, 9, 7, 8 10 9 15 7 8 25 17 10 7 15 8 9 25 17 Bentuk binary tree yang paling ideal adalah perfect binary tree minimal complete binary tree Pada BST terdapat kemungkinan ada node yang terletak jauh dari root Waktu yang dibutuhkan untuk searching menjadi lebih banyak
LATIHAN: Input : ORY, JFK, BRU, DUS, ZRH, MEX, ORD, NRT, ARN, GLA dan GCM
Wassalamu’alaikum … Terima Kasih Departemen Ilmu Komputer FMIPA-IPB 2009