AVL TREE





AVL Tree adalah Binary Search Tree yang memiliki perbedaan tinggi antara subtree kiri dan subtree kanan. AVL Tree digunakan untuk menyeimbangkan Binary Search Tree, sehingga waktu pencarian dan bentuk tree dapat dipersingkat dan disederhanakan. 

Ada 4 kasus yang biasanya terjadi saat operasi insert dilakukan, yaitu :
anggap T adalah node yang harus diseimbangkan kembali

- Kasus 1 : node terdalam terletak pada subtree kiri dari anak kiri T (left-left)
- Kasus 2 : node terdalam terletak pada subtree kanan dari anak kanan T (right-right)
- Kasus 3 : node terdalam terletak pada subtree kanan dari anak kiri T (right-left)
- Kasus 4 : node terdalam terletak pada subtree kiri dari anak kanan T (left-right)

Proses penyeimbangan dalam AVL TREE

1. Single Rotation 
Dilakukan bila kondisi AVL tree ditambahkan node baru. Dimana T1, T2, dan T3 adalah subtree yang urutannya harus seperti demikian sama dengan height-nya (≥ 0).  Hal ini juga berlaku untuk AVL tree yang merupakan citra cermin (mirror image).


 

2. Double Rotation 
Double rotation dilakukan bila kondisi AVL tree  ditambahkan node baru. Dimana T1, T2, T3, dan T4 adalah subtree yang urutannya harus seperti demikian. Tinggi subtree T1 harus sama dengan T4 (≥ 0), tinggi subtree T2 harus sama dengan T3 (≥ 0). Node yang ditambahkan akan menjadi child dari subtree T2 atau T3. Hal ini juga berlaku untuk AVL tree yang merupakan citra cermin (mirror image).

  

 Deletion AVL

Operasi penghapusan node sama seperti pada Binary Search Tree, yaitu node yang dihapus digantikan oleh node terbesar pada subtree kiri atau node terkecil pada subtree kanan. Jika yang dihapus adalah leaf, maka langsung hapus saja. Namun jika node yang dihapus memiliki child maka childnya yang menggantikannya. Namun setelah operasi penghapusan dilakukan, cek kembali apakah tree sudah seimbang atau belum, jika belum maka harus diseimbangkan kembali. Cara menyeimbangkannya pun sama seperti insertion.

delete node 60

node 55 tidak seimbang, karena anak kiri 0 dan anak kanan 2, selisih 2.
diseimbangkan dengan single rotation (left-left) karena 55 ke 65 kiri dan 65 ke 70 kiri
akan tetapi, node 50 menjadi tidak seimbang, di subtree kiri 4 dan subtree  kanan 2

diseimbangkan dengan double rotation (left-right) karena dari 50 ke 25 kiri dan 25 ke 40 kanan

AVL yang sudah balance



sumber : 
https://socs.binus.ac.id/2017/05/15/deletion-avl-tree/
http://dinda-dinho.blogspot.com/2013/06/pengertian-dan-konsep-avl-tree.html
http://suciantinovi.blogspot.com/2014/05/balanced-binary-tree-and-2-3-tree.html

Komentar

Postingan populer dari blog ini

Heap and Tries