Balanced Binary Tree (AVL Tree)
AVL Tree adalah Binary Search Tree yang memiliki perbedaan tinggi/ level maksimal 1 antara subtree kiri dan subtree kanan. AVL Tree muncul untuk menyeimbangkan Binary Search Tree. Dengan AVL Tree, waktu pencarian dan bentuk tree dapat dipersingkat dan disederhanakan.
Gambar:
Cara menentukan height dan balance factor:
Height :
- Jika node (root) tidak memiliki subtree heightnya = 0
- Jika node adalah leaf, height = 1
- Jika internal node, maka height = height tertinggi dari anak + 1
Balance Factor :
-selisih height antara anak kiri dan kanan, jika tidak memiliki anak, dianggap 0.
- Jika node (root) tidak memiliki subtree heightnya = 0
- Jika node adalah leaf, height = 1
- Jika internal node, maka height = height tertinggi dari anak + 1
Balance Factor :
-selisih height antara anak kiri dan kanan, jika tidak memiliki anak, dianggap 0.
AVL Tree Operations:
1. Insertion
AVL Tree mempunyai 2 proses balancing/insertion, yaitu:
- Single Rotation
Single rotation dilakukan apabila searah, left-left atau right-right
Karena sisi kiri 2 memiliki kedalaman 1, dan sisi kanan 2 memiliki kedalaman 3. maka selisih kedalamannya adalah 2, sehingga tidak balance. Dengan begitu, kita harus merotate sisi kanan seperti pada gambar diatas.
- Double Rotation
Double rotation dilakukan apabila searah, left-right atau right-left.
Karena memiliki sisi bengkok, maka proses balancing akan menggunakan double rotation seperti pada gambar diatas.
2. Deletion
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.
Jika 4 didelete, maka akan terjadi ketidakseimbangan di no 3. dengan begitu kita harus melakukan rotasi pada no 2, tetapi saat mengecek no 5 juga tidak seimbang. kita juga harus melakukan rotasi pada no 8, dan hasil akhirnya akan balance seperti pada gambar diatas.
Referensi:




Komentar
Posting Komentar