Implementasi AVL Tree sebagai BST Plus Rebalancing

Proses awal penyisipan atau penghapusan dilakukan sesuai aturan BST, tapi dilanjutkan dengan proses rebalance berdasarkan kasus-kasus yang terjadi. Dengan adanya toleransi perbedaan tinggi max 1 tersebut maka rebalancing dapat dilokalisir hingga tingkat subtree tertentu. Untuk mengetahui subtree mana rebalance akan dilakukan suatu penelusuran berdasarkan harga BF tersebut mulai dari yang paling lokal yaitu subtree dari ayah node yang baru masuk/dihapus ke setiap ancestor tepat di atasnya (lebih global) hingga diketahui saat BF ancestor tidak mengalami perubahan BF. Perhatikan contoh berikut ini yang menunjukkan perubahan BF sejumlah node akibat adanya penyisipan.
sayang, anda harus menggunakan browser yang java 1.1.* enable.....
Setelah penyisipan key 53.
sayang, anda harus menggunakan browser yang java 1.1.* enable.....
Dengan haya melakukan rebalancing pada subtree dengan BF +2 atu -2 terendah maka segera tree kembali menjadi AVL.
sayang, anda harus menggunakan browser yang java 1.1.* enable.....

Berikut akan dijelaskan selengkapnya operasi-operasi rebalancing pada semua kemungkinan struktur subtree saat terjadi penyisipan.

Rebalancing dengan Rotasi

Pada dasarnya rebalancing dilakukan dengan merotasikan node-node tertentu dalam subtree tsb berdasarkan harga-harga BF node-node level atas dalam subtree. Ada empat jenis rotasi:

Algoritma Rebalance Pada Penyisipan

Penyisipan key dengan BST menghasilkan node baru sebagai leaf yang kita sebut N yang menjadi anak dari P. Jika N adalah turunan kiri dari P, maka BF(P) -= 1, jika turunan kanan maka BF(P) += 1. Kemudian periksa :

Contoh

Perhatikan contoh terakhir berikut ini yang mengalami penyisipan key 26. Setelah penyisipan 26 secara BST maka tree menjadi sbb.
sayang, anda harus menggunakan browser yang java 1.1.* enable.....
Setelah DLR pada subtree 23 menghasilkan sbb.
sayang, anda harus menggunakan browser yang java 1.1.* enable.....
Setelah penyisipan 53 secara BST menghasilkan tree sbb.
sayang, anda harus menggunakan browser yang java 1.1.* enable.....
Setelah dilakukan SLR pada subtree 51 menghasilkan tree sbb.
sayang, anda harus menggunakan browser yang java 1.1.* enable.....

Latihan

Penyusunan AVL tree dari keadaan kosong dengan bilangan-bilangan:
745, 555, 878, 785,    750, 751, 756, 769,    449, 711, 712, 713.
Hint: penyisipan empat data pertama akan berlangsung sebagaimana dilakukan BST tanpa terjadi proses rebalance karena masing-masing sudah membentuk AVL tree dan terakhir akan menghasilkan AVL tree sbb.
sayang, anda harus menggunakan browser yang java 1.1.* enable.....

Berapa kali rotasi perlu dilakukan pada penyisipan? Jika suatu subtree mengalami rotasi berarti struktur di dalamnya belum jenuh (mencapai perfect binary tree) ie. masih mampu menerima node baru tanpa terjadi penambahan tinggi. Jadi setiap penyisipan hanya akan berakibat satu kali rotasi atau tidak sama sekali.

Algoritma Rebalance Pada Penghapusan

Dalam proses penghapusan, jika ayah/ancestor dari node yang dihapus mengalami perubahan BF dari 0 menjadi -1 (atau +1), maka subtree P tidak mengalami perubahan tinggi dan berarti selesai. Jika perubahan BF terjadi dari +1 (atau -1) menjadi 0 maka berarti terjadi pemendekan subtree yang dapat mengakibatkan perubahan di ancestor yang lebih tinggi. Selain itu adalah BF berubah menjadi +2 atau -2 yang mengakibatkan rotasi sesuai kondisi yang terjadi. Perlu ditekankan disini bahwa pada penghapusan, BF dari node P dalam diagram dapat berharga 0 (dalam penyisipan tidak akan terjadi, mengapa?). Untuk kondisi maka kombinasi BF(R)=+2 dan BF(P)=0 menghasilkan SLR dan BF(R) = -2 dan BF(P) = 0 menghasilkan SRR.