0% menganggap dokumen ini bermanfaat (0 suara)
115 tayangan33 halaman

AVL Tree

AVL tree adalah varian dari binary search tree yang selalu balanced. Setiap operasi pada AVL tree dilakukan pengecekan dan perbaikan balance factor. Penambahan node dilakukan dengan single atau double rotation, sedangkan penghapusan node dilakukan dengan menghapus node, menggantikan, atau mencari predecessor secara inorder lalu melakukan rotasi untuk menjaga keseimbangan tree.

Diunggah oleh

Wahyu Kusuma
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
115 tayangan33 halaman

AVL Tree

AVL tree adalah varian dari binary search tree yang selalu balanced. Setiap operasi pada AVL tree dilakukan pengecekan dan perbaikan balance factor. Penambahan node dilakukan dengan single atau double rotation, sedangkan penghapusan node dilakukan dengan menghapus node, menggantikan, atau mencari predecessor secara inorder lalu melakukan rotasi untuk menjaga keseimbangan tree.

Diunggah oleh

Wahyu Kusuma
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 33

AVL Tree

Tujuan
• Memahami variant dari Binary Search Tree yang
balanced

■ Binary Search Tree yang tidak balance dapat membuat seluruh


operasi memiliki kompleksitas running time O(n) pada kondisi worst
case.
AVL Trees
• Untuk setiap node dalam tree, ketinggian
subtree di anak kiri dan subtree di anak
kanan hanya berbeda maksimum 1.

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

• Sebuah penambahan • Sebuah penambahan pada


pada subtree: subtree:
– A (outside) - case 1 – B (inside) - case 3
– B (inside) - case 2 – C (outside) - case 4
Single Rotation (case 1)
HA=HB+1
HB=HC

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!

Anda mungkin juga menyukai