Skip to main content

AVL Tree Summary


AVL TREE

AVL Tree merupakan Binary Search Tree (BST) yang seimbang sehingga lebih cepat untuk mencarinya dibanding dengan BST. Didalam AVL keseimbangan haruslah sangat diperhatikan tiap node tidak boleh kurang dari -1 dan tidak boleh juga lebih dari 1. Cara menentukan apabila balance atau tidak adalah dengan jumlah bagian terpanjang sebelah kanan - bagian terpanjang sebelah kiri.


Berikut adalah Contoh AVL Tree:



Diatas adalah contoh AVL Tree yang sempurna karena perbedaan antara yang kanan dengan yang sebelah kiri adalah 0.

Di AVL Tree setiap setelah melakukan Insertion atau deletion harus di cek kembali keseimbangan di dalam AVL Tree-nya, Apabila AVL Tree belum seimbang maka ada dua kemungkinan cara untuk menyeimbangkan Tree tersebut.


Yang pertama adalah dengan menggunakan Single Rotation

Dibawah ini adalah contoh AVL Tree yang tidak seimbang:




Karena yang bagian sebelah kiri – bagian sebelah kanan adalah 2 maka AVL Tree diatas belum lah seimbang dan AVL Tree diatas dapat diseimbangkan dengan menggunakan Single Rotaion sehingga hasilnya menjadi :






Di AV L Tree yang salah diatas setelah angka 50 dari bagian sebelah kiri dengan bagian sebalah kanan perbedaannya adalah 2 sehingga jika diselesaikan menggunakan single rotation angka 28 di tarik kekanan dan angka 50 nya juga ditarik kekanan agar seimbang. Untuk anak sebelah kanan dari angka 28 tadi akan di insert ulang dari atas sehingga menjadi anak sebelah kiri angka 50.  

Untuk Single rotation kiri dan kanan (LL & RR) itu caranya sama seperti yang diatas perbedaannya adalah dalam LL Single Rotation setiap node atau angka bergerak satu posisi ke sebelah kiri dari posisi saat ini dan kalau RR Single Rotation setiap node atau angka bergerak satu posisi ke kanan dari posisi saat ini.


Cara yang kedua adalah dengan menggunakan Double Rotation

Diatas merupakan AVL Tree yang belum seimbang karena diangka 55 di bagian anak sebalah kanannya jika dikurang dengan anak disebelah kirinya merupakan 2 sehingga perlu diseimbangkan dengan menggunakan Double Rotation seperti berikut:






Langkah pertamanya adalah dengan menarik angka 58 sehingga anak dari angka 58 ketika di insert menjadi anak sebelah kiri dari angka 60, langkah yang keduanya adalah menarik lagi angka 58 sehingga angka 55 menjadi anak sebelah kiri dari angka 58 (cara mudah untuk menentukan letak anaknya adlaah dengan insert dari pusat teratas).
Dalam double rotation juga dapat dilakukan melalui Left Double rotation dan Right Double Rotation seperti namanya rebalancingnya dilakukan melalui sebelah kiri dan sebelah kanan.

Comments

Popular posts from this blog

Heap dan Tries

Heap and Tries Heap itu pada dasarnya adalah BST (Binary Search Tree) yang memenuhi psayarat dari properti heap. Heap juga dapat dibilang implementasi efisien dari tipe abstrak dengan antrian prioritas. Ada 3 tipe heap, yaitu : Min Heap Dalam min heap, setiap node di atas lebih kecil dari pada childrennya. Contohnya seperti dibawah ini, Untuk insert, urutannya selalu dari kiri baru ke kanan. Sebagai contoh apabila di insert angka 14 maka seperti dibawah ini, Untuk deletion, nilai terakhir dinakkan ke atas dan melakukan heapifi apabila lebih kecil, sebagi contoh apabila root dihapus maka seperti ini, Max Heap Max hepa adalah kebalikan daripada min heap, Jadi node yang diatas lebih besar daripada childrennya, contohnya seperti berikut ini, Untuk insert sama seperti min heap semuanya dimulai dari sebalah kiri, sebagai contoh apabila di insert angka 2 maka jadi seperti, Untuk deletiosn juga sama seperti min heap jadi apabila di ha

RANGKUMAN DATA STRUCTURE DARI PERTEMUAN AWAL

Nama : Muhamad Faqih NIM : 2301887931 Kelas : CB01 Lecturer : Ferdinand Ariandy Luwinda (D4522) dan Henry Chong (D4460) SUMMARY DATA STRUCTURE DARI PERTEMUAN AWAL Linked List II 1. Circular single Linked list Single linked list adalah satu variabel pointer untuk menyimpan data dengan metode linked list. Data disimpan ke dalam node, setiap node memiliki pointer untuk menunjuk ke node berikutnya. Nah, kalau Circular single linked list itu sama seperti single linked list tetapi setiap node awalnya menyambung dengan node akhir seperti lingkaran, selalu menyambung. Ini adalah ilustrasi perbedaan single linked list (atas) dan circular single linked list(bawah) 2. Doubly linked list Adalah Linked list yang mempunya dua pointer yaitu pointer prev dan next. Pointer prev digunakan untuk menunjukkan ke data sebelumnya dan sebaliknya kalau pointer next menunjukkan ke data selanjutnya Contoh code untuk double linked list