AVL Tree
AVL Tree
Tujuan
• Memahami variant dari Binary Search Tree yang
balanced
X X
H
H-2
H-1
AVL Trees
1
2
1
8
6
1 1
4
0 4
2 6
Insertion pada AVL Tree
• Setelah insert 1
1
2
1
8
6
1 1
4
0 4
2 6
1
Insertion pada AVL Tree
• Untuk menjamin kondisi balance pada
AVL tree, setelah penambahan sebuah
node. jalur dari node baru tersebut
hingga root di simpan dan di periksa
kondisi balance pada tiap node-nya.
• Jika setelah penambahan, kondisi
balance tidak terpenuhi pada node
tertentu, maka lakukan salah satu rotasi
berikut:
– Single rotation
– Double rotation
Kondisi tidak balance
HP=HQ=HR k2 k1
k1 k2
C A
A B B C
k2 k1
k1 k2
C
A
B B C
A
Single Rotation (case 4)
HA=HB
HC=HB+1
k2 k1
k1 k2
A
A B C B
C
Keterbatasan Single Rotation
• Single rotation tidak bisa digunakan
untuk kasus 2 dan 3 (inside case)
k k
2 1
k k
1 2
C A
A C
B B
HB=HA+1
HA=HC
Double Rotation: Langkah
k3 k3
k1 k2
k2 k1
D D
A C
B C A B
HA=HB=HC=HD
Double Rotation: Langkah
k2
k1 k3
A B C D
Double Rotation
k k
3 2
k k k
1 1 3
k
2
D B C
A D
A
B C
HA=HB=HC=HD
Double Rotation
k k
2 1
k k k
1 3 3
k
2
A B C D A
D
B C
HA=HB=HC=HD
Contoh
• penambahan 3 pada AVL tree
1 1
1 1
8 2 2
0 4
0
4 1 2 1
3 2
6 7 8 6 7
3
Contoh
• penambahan 5 pada AVL tree
1 1
1 1
8 2 8 2
0 0
4 1 2 5 1 2
6 7 6 7
5 4
Contoh
• Rotasi ke 2
1
1
5 2
0
4 1 2
8 6 7
AVL Trees: Latihan
• Coba simulasikan penambahan pada sebuah AVL dengan
urutan penambahan:
– 10, 85, 15, 70, 20, 60, 30, 50, 65, 80, 90, 40, 5, 55
http://www.strille.net/works/media_technology_projects/avl-tree_2001/
Operasi: Remove pada AVL
Tree
1. Menghapus node pada AVL Tree sama dengan
menghapus binary search tree procedure dengan
perbedaan pada penanganan kondisi tidak balance.
2. Penanganan kondisi tidak balance pada operasi
menghapus node AVL tree, serupa dengan pada operasi
penambahan. Mulai dari node yang diproses (dihapus)
periksa seluruh node pada jalur yang menuju root
(termasuk root) untuk menentukan node tidak balance
yang pertama
3. Terapkan single atau double rotation untuk
menyeimbangkan tree.
4. Bila Tree masih belum balance, ulangi lagi dari langkah
2.
Menghapus node X pada AVL Trees
• Deletion:
– Kasus 1: jika X adalah leaf, delete X
– Kasus 2: jika X punya 1 child, X
digantikan oleh child tsb.
– Kasus 3: jika X punya 2 child, ganti X
secara rekursif dengan predecessor-nya
secara inorder
• Rebalancing
Delete 55 (Kasus 1)
6
0
2 7
0 0
1 4 6 8
0 0 5 5
1 3 5 8 9
5 0 0
5 0 0
5
5
Delete 55 (Kasus 1)
6
0
2 7
0 0
1 4 6 8
0 0 5 5
1 3 5 8 9
5 0 0
5 0 0
5
5
Delete 50 (Kasus 2)
6
0
2 7
0 0
1 4 6 8
0 0 5 5
1 3 5 8 9
5 0 0
5 0 0
5
5
Delete 50 (Kasus 2)
6
0
2 7
0 0
1 4 6 8
0 0 5 5
5 8 9
1 3
5 0 0 0
5 0
5
5
Delete 60 (Kasus 3)
6
0
2 7
0 0
1 4 6 8
0 0 5 5
1 3 5 8 9
5 prev 0 0
5 0 0
5
5
Delete 60 (Kasus 3)
5
5
2 7
0 0
1 4 6 8
0 0 5 5
1 3 5 8 9
5 0 0
5 0 0
Delete 55 (Kasus 3)
5
5
2 7
0 prev 0
1 4 6 8
0 0 5 5
1 3 5 8 9
5 0 0
5 0 0
Delete 55 (Kasus 3)
5
0
2 7
0 0
1 4 6 8
0 0 5 5
1 3 8 9
5 0 0
5 0
Delete 50 (Kasus 3)
5
0
2 prev 7
0 0
1 4 6 8
0 0 5 5
1 3 8 9
5 0 0
5 0
Delete 50 (Kasus 3)
4
0
2 7
0 0
1 3 6 8
0 0 5 5
1 8 9
5 0 0
5
Delete 40 (Kasus 3)
4
0
2 7
0 prev 0
1 3 6 8
0 0 5 5
1 8 9
5 0 0
5
Delete 40 : Rebalancing
3
0
2 7
0 0
1 Kasus ? 6 8
0 5 5
1 8 9
5 0 0
5
Delete 40: setelah rebalancing
3
0
1 7
0 0
2 6 8
5 0 5 5
1 8 9
5 0 0
Single rotation is
preferred!