BINARY SEARCH TREE TUJUAN UMUM Mahasiswa memahami binary search Tree
Tujuan Khusus Bentuk Khusus Binary Tree Rekursive pada Binary Tree Tree Traversal Operasi pada Binary Tree Implementasi Binary Tree pada Array Implementasi dengan double Linked List Implementasi dengan Multi Linked List Expression Tree
2. Binary Search Tree Adalah binary tree dengan sifat bahwa 1. semua left child harus lebih kecil daripada right child dan parentnya. 2. Juga semua right child harus lebih besar dari left child serta parentnya. 3. Parent harus lebih besar dari left subtreedan harus lebih kecil dari right subtree. 4. Tidak boleh ada node yang mempunyai nilai yang sama, dengan kata lain tidak boleh terjadi duplikasi data. Target Node Karena ketentuan di atas, maka Binary Seacrh tree dapat digunakan untuk tempat penyimpanan data secata terurut, sehingga pencarian data (searching) bisa lebih efisien. Untuk itu dapat ditentukan suatu target node yaitu node yang berisi data yang akan dicari.
Contoh Binary Search Tree Gita Edi Kemal Bejo Farid Halim Silvi Operasi-operasi pada binary search tree Semua operasi pada binary search tree dapat digunakan pada Binary Search Tree, kecuali: Insert Update Delete Perlu perubahan pada operasi Insert dan Delete sehingga urutan data di dalam tree dapat dipertahankan. Insert(elemen_type e) Insert selalu dimuali dari Root node a. Bila tree kosong, maka node baru sebagai Root node b. Bila tidak kosong nilai e dibandingkan dengan nilai root c. Bila lebih kecil insert ke subtree kiri, bila lebih besat inser ke subtree kanan.
Insert(); CONTOH Memasukkan sebuah node yang berisi angka. Karena tree masih kosong, maka secara otomatis node tersebutmenjadi root Insert(15); Karena 15 lebih besar, maka sesuai dengan peraturan harus berada disebelah kanan parent (right child) Insert(13); Karena 13 lebih besar, maka sesuai dengan peraturan harus berada disebelah kanan parent (right child), lalu dibandingkan lagi dengan 15. Karena lebih kecil maka 13 menempati left child dari 15. 15 15 Insert(9); Insert(5); Insert(11); Insert(); 13
Delete( ) Semua proses delete akan dimulai dari binary search tree berikut: 5 4 6 Jika yang didelete adalah leaf node, maka tidak perlu perubahan posisi pada tree. Delete(4); 5 6 Jika yang didelete adalah node yang memiliki satu anak, maka anak tersebut menggantikan posisi parent. Delete(5);
5 6 6 Jika yang didelete adalah node yang memiliki dua anak, maka pengganti posisi parent dapat dipilih: a. Node terbesar dari subtree kiri atau b. Node terkecil dari subtree kanan Delete(); 19 6
6 Dari subtree Kiri 6 Dari subtree Kanan 6
Update Seperti pada binary tree biasa, namun di sini akan berpengaruh pada posisi node tersebut selanjutnya. Bila setelah diupdate mengakibatkan tree tersebut bukan binary search tree lagi, maka harus dilakukan perubahan pada tree dengan melakukan rotasi supaya tetap menjadi Binary search tree. Pada dasarnya operasi ini merupakan gabungan dari operasi Delete dan Insert. Contoh: Update(34); Delete node yang ditunjuk oleh current kemudian insert 34.
LATIHAN: Bila tanda + menunjukkan Insert dan tanda menunjukkan delete, gambarkan Binary search tree untuk data berikut: +45 +56 + +30-45 +54 +34 +55 - +67-54 2. Untuk Binary Search tree berikut, buat perintah-perintah dengan Find( ), Insert( ) dan Delete( ), untuk mengubah menjadi 53. Gambar Binary Search tree yang terjadi. 6
AVL TREE Kelemahan yang dialami oleh binary search tree adalah kemungkinan bentuk tree yang didapat adalah bentuk skewed (binary tree miring) sehingga pencarian menjadi sekuensial. Untuk menghindari hal tersebut, digunakan AVL tree, di mana karakteristik dari tree tersebut adalah: Perbedaan tinggi/level antara subtree kiri dan subtree kanan maksimal adalah 1. Keseimbangan subtree kiri dan kanan, dijaga dengan suatu mekanisme rotasi, untuk itu perlu diterapkan beberapa kerentuan sebagai berikut: 1. Tanda Keseimbangan subtree: a. Node parent diberi tanda 0, bila ketinggian subtree kiri = subtree kanan. b. Node parent diberi tanda +, bila ketinggian subtree kiri < subtree kanan c. Node parent diberi tanda -, bila ketinggian subtree kiri > subtree kanan
+ 0 + 5 0-0 - 16 4 6 0 14 30 46 61 76 54 63 2. Search Path Path dimana node baru akan melalui untuk sampai pada posisi insert. Contoh: Insert(17); Search Path untuk data 17 5
3. Pivot Node Pivot Node adalah node yang: a. Berada di search-path b. Bertanda + atau c. Paling dekat dengan node baru Pivot node merupakan sumbu putar, bila regenarasi tree diperlukan. 0 + + 5 0-0 - 16 4 6 0 14 30 46 61 76 54 63 Node 16 adalah pivot node, bila node baru = Node adalah pivot node, bila node baru = Node adalah pivot node, bila node baru = Node adalah pivot node, bila node baru =
Operasi INSERT Kasus 1 Tidak terdapat pivot node, maka node baru langsung masuk tanpa harus melihat keseimbangan subtree Kasus 2 Terdapat pivot node, periksa keseimbangan subtree, bila node baru tidak menyebabkan perbedaan ketinggian subtree > 1 maka node dapat masuk tanpa regenarasi tree Keseimbangan subtree dilihat dari pivot node. Kasus 3 Terdapat pivot node, periksa keseimbangan subtree, bila node baru menyebabkan perbedaan ketinggian subtree > 1 maka node masuk dengan melakukan regenerasi tree. Regenarasi Tree 1. Rotasi Tungggal(single Rotasion) Rotasi Kiri atau Kanan 2. Rotasi Ganda( Double Rotation) Rotasi Kiri kemudian Rotasi kanan atau Rotasi kanan kemudian rotasi kiri
Contoh Kasus 1 0 Insert dengan nilai node berapapun, langsung masuk, misalkan: Insert(54); + - Contoh Kasus 2 + - Insert(70), pivot node adalah node
+ 0 70 Contoh Kasus 3 Insert(72), pivot node adalah node P + Menjadi anak Kiri 0 Menjadi Parent 70 Menadi Anak Kanan 72 Gambar parent, anak kiri dan kanan 70
Tambahkan node sebagai anak dan node 72 sebagai anak 70. Diman posisi posisi 54? LATIHAN: 1. Lakukan operasi Insert untuk data: 3 2 56 15 13 30 60 70 75 55 45 35 25 15 2. Cari informasi tentang singkatan AVL, ia merupakan nama dua orang yang pertama kali membangun heightbalance tree.
Rotasi Ganda Insert();Insert(30) dan Insert(); akan menghasilkan tree. P + Menjadi anak Kiri 30 Menjadi Parent Menadi Anak Kanan Seandainya dilakukan rotasi tunggal menurut langkah-langkah yang telah dijelaskan pada pertemuan yang lalu, maka didapat hasil sebagai berikut: 30 Hasil tersebut tentu bukan yang diharapkan, oleh karena itu kasus seperti di atas harus diselesaikan dengan rotasi ganda.
P + Rotasi Kedua 30 Rotasi Pertama Hasil dari rotasi pertama: P + Hasil dari rotasi kedua: 30 30 Sesuai dengan yang diharapkan.
Contoh lain: Insert(53); + Rotasi Kedua 54 53 0 70 Rotasi Pertama Hasil dari Rotasi Pertama: Hasil dari Rotasi Kedua: + 54 Rotasi Kedua 54 53 53 70 70
Rotasi Ganda Rotasi kiri kemudian Rotasi kanan. Insert(21) 29 0 0-5 16 0 4 6 14 22 Latihan: 1. Lakukan operasi Insert untuk data: a. 3,, 2,, 56, 8, 15, 18 b., 16, 14, 8, 9, 13,, 11, 15,, 18, 22, 17 Pada AVL tree.
OPERASI DELETE Pada operasi delete, tidak ada pivot node, karena tidak ada node baru yang akan masuk. Sebagai acuan bila operasi delete menyebabkan tree harus regenerasi, digunakan pemeriksaan secara berjenjang mulai dari anak node yang dihapus di mana node pengganti berada, dilanjutkan ke posisi node yang dihapus, kemudian terus naik hingga Root node. Selama pemeriksanaan dapat terjadi beberapa rotasi baik rotasi tunggal maupun rotasi ganda, dengan demikian operasi delete merupakan operasi yang sangat kompleks, lebih sulit dari operasi insert.