Struktur Data Tree Eka Rahayu S. (2 Agustus 2011) Topik Bahasan • Struktur data TREE • Operasi dalam TREE • Rekursi (untuk kepentingan TREE) Tree Root Node/ Vertex/ Point Edge/ Branch / Line 8 4 8 Height 6 6 10 Subtree 4 4 7 3 1 7 10 3 12 1 12 14 15 14 19 19 20 15 20 18 18 11 Leaf Balanced Tree: 11 Sebuah Tree dikatakan seimbang ketika rata-rata tinggi tiap subtree adalah sama 13 13 17 17 21 21 22 22 Binary Tree Max: 2 cabang (cabang kiri dan cabang kanan) Cabang kiri Untuk nilai yang lebih kecil 8 6 4 Cabang kanan Untuk nilai yang lebih besar atau sama dengan 10 7 12 11 Jenis Tree yang Lain 1. Termasuk dalam golongan n-ary Tree • Binary Tree • Ternary Tree (max 2 cabang) (max 3 cabang) 2. Binary Search Tree • Red Black Tree • AA-Tree • AVL Tree 3. Multiway Tree • B-Tree (ada warna pada tiap node) (penyederhanaan RB-Tree) (Adelson-Velskii dan Landis) Implementasi Tree dalam Linked List Head 1 2 3 5 6 4 7 9 8 10 Nyicil: mari kita buat struktur data tree dengan [double] linked list Operasi dalam Tree • • • • Insert Traverse Search Delete (menambahkan nilai) (menelusuri tiap node tree) (mencari suatu nilai) (menghapus nilai) Sumber: http://en.wikipedia.org/wiki/Binary_tree [1] Proses Insert • Jika root masih kosong – Node baru adalah root • Jika tidak (root sudah terbentuk) – Cari posisi yang masih kosong Jika LEBIH KECIL, cari posisi kiri Jika LEBIH BESAR, cari posisi kanan – Node baru menempati posisi kosong tersebut .: insert :. Ternyata posisi saat ini sudah terisi, Kondisi Maka, Cek Cek, Ulangi Jika Kebetulan, Begitu node ternyata apakah kembali, apakah jadikan kembali: terus awal, root baru cabang kanannya root node selanjutnya node apakah root sudah node lebih nya baru masih baru kirinya baru ada terisi. KECIL masih root masih lebih lebih untuk isinya. kosong. sebagai masih masih dari kosong? kosong. KECIL BESAR node setiap root. dari kali Sehingga tidak bisa diisi node baru. kosong, kosong? Maka yang Cek, dari Maka, proses node apakah ditunjuk, ditunjuk cari cari tambahkan insert.... maka yang posisi posisi node saat node maka ditunjuk kosong kosong baru node ini? baru telusuri lebih untuk baru saat untuk ditambahkan cabang ini, KECIL ke node node cabang maka dari yang ditunjuk Maka, harus penelusuran kembali. kirinya. pada baru. Jika saat telusuri kanan. iya, ini? cabang KANAN maka Jika dilakukan iya, kirinya. telusuri nya. makasisi telusuri KIRInya. sisi KIRInya. root 7 5 7 5 6 Perintah: INSERT 7 INSERT 5 INSERT 6 Cobalah! • • • • • • • Insert 9 Insert 15 Insert 5 Insert 7 Insert 10 Insert 19 Insert 11 Bagaimanakah bentuk TREE nya? Nyicil: Coba lengkapi Tree yang tadi kita buat dengan procedure insert! [2] Proses Traverse • Breadth First Search (BFS) – Pencarian yang melebar (pada setiap level) – Memanfaatkan Queue • Depth First Search (DFS) – Pencarian yang mendalam – Dilakukan secara recursive – Ada 3 jenis: • Pre-order traversal • In-order traversal • Post-order traversal Breadth First Search (breadth = melebar) Queue untuk pengaksesan: Expand FIFO: Lanjutkan: DELETE Dari Dan Pertama, seterusnya.... 10, maka semua dari lagi telusuri expand expand DELETE 1queue node, child semua dari semua (dapat 6yaitu dari root childnya 810 child 8) 6 8 6 4 7 8 6 10 3 1 12 11 19 20 4 7 13 15 14 10 15 13 18 21 17 22 Intinya.... Setiap proses dilakukan ke kanan. Menelusuri semua child dalam satu level, dilanjutkan dengan level dibawahnya. 3 1 Depth First Search (depth = kedalam) 10 6 4 3 1 null 12 7 null 11 8 5 nullnull Ingat kembali bahwa TREE termasuk dalam struktur data yang ORDERed. null 14 13 Proses dilakukan dengan recursive: • Menelusuri cabang kiri hingga null • Setelah itu baru menelusuri cabang kanannya Dari cabang kanan, ditelusuri lagi cabang kirinya dst Ingat kembali... Apa perbedaan BFS dan DFS? x-Order Traversal 1. In-Order Traversal subtree kiri – root – subtree kanan 2. Pre-Order Traversal root – subtree kiri – subtree kanan 3. Post-Order Traversal subtree kiri – subtree kanan – root Contoh! 10 6 5 19 21 15 17 • IN : 5, 6, 10, 15, 17, 19, 21 (subtree kiri saat di kanan, subtree kanan saat di kiri) • PRE : 10, 6, 5, 19, 15, 17, 21 (saat penelusur ada di kiri) • POST : 5, 6, 17, 15, 21, 19, 10 (saat penelusur ada di kanan) [3] Proses Search Dilakukan dengan memafaatkan proses Traverse (saat pertama kali sebuah node berwarna abu-abu pada contoh di slide sebelumnya) Nah.... Masalahnya, masihkah Anda ingat bagaimana Recursive? [4] Proses Delete • Cari node yang akan dihapus • Jika node tersebut tidak punya child, langsung hapus • Namun jika punya satu child, arahkan pointer parent ke child dari node yang akan dihapus • Namun jika node yang akan dihapus punya dua anak: – Opsi 1: cari child paling kanan dari subtree kiri, sebut sebagai replacer – Opsi 2: cari child paling kiri dari subtree kanan, sebut sebagai replacer – Ganti node yang akan dihapus dengan replacer