Definisi
• Sebuah binary tree dimana
Contoh BST
20
10
6
2 8
15
40
30
Binary Search Tree
• Operasi BST : penambahan,
penghapusan, pencarian node tertentu, pencarian niai terkecil dan pencarian
nilai terbesar.
• Properti Binary Search Tree :
– Untuk setiap node X, semua elemen di
Insert
• Dimulai dengan
penelusuran dari root untuk mencari posisi yang tepat.
• Jika elemen X
ditemukan (berarti X sudah ada di BST), maka tidak perlu melakukan aksi apapun.
• Jika tidak, maka
letakkan X sebagai node terakhir pada jalur penelusuran
• Time complexity =
Delete
• Saat akan menghapus sebuah node,
kita juga harus memikirkan seluruh node anak dari node tsb.
– Hal penting adalah agar pohon setelah
Operasi Penghapusan / remove()
Ada 3 kasus :
Elemen ada di leaf/daun.
Elemen yang memiliki degree 1.
Penghapusan Node Daun (Node
7)
Remove a leaf element. key = 7
20
10
6
2 8
15
40
30
25 35
7
Penhapusan Node Daun (Node
35)
Remove a leaf element. key = 35
20
10
6
2 8
15
40
30
25 35
7
Penghapusan Node Ber-degree 1
Remove from a degree 1 node. key = 40
20
10
6
2 8
15
40
30
25 35
7
Penghapusan Node Ber-degree 1
Remove from a degree 1 node. key = 15
20
10
6
2 8
15
40
30
25 35
7
Penghapusan Node Ber-degree 2
Remove from a degree 2 node. key = 10
20
10
6
2 8
15
40
30
25 35
7
Remove From A Degree 2 Node
20 10 6 2 8 15 40 30 25Replace with largest key in left subtree (or smallest in right subtree).
35
7
Penghapusan Node Ber-degree 2
20 10 6 2 8 15 40 30 25Replace with largest key in left subtree (or smallest in right subtree).
35
7
Penghapusan Node Ber-degree 2
20 8 6 2 8 15 40 30 25Replace with largest key in left subtree (or smallest in right subtree).
35
7
Latihan
Remove from a degree 2 node. key = 20
20
10
6
2 8
15
40
30
25 35
7
Penghapusan Node Ber-degree 2
20
10
6
2 8
15
40
30
25
Replace with largest in left subtree.
35
7
Penghapusan Node Ber-degree 2
20
10
6
2 8
15
40
30
25
Replace with largest in left subtree.
35
7
Penghapusan Node Ber-degree 2
18
10
6
2 8
15
40
30
25
Replace with largest in left subtree.
35
7
Hasil Akhir
18
10
6
2 8
15
40
30
25 35
Pencarian pada BST
• Jika mencari elemen
bernilai 15, maka akan langsung ditemukan.
• Jika mencari elemen
bernilai < 15, maka kita cari di subpohon kiri.
• Jika mencari elemen
findMin/ findMax
• findMin : mengembalikan node dengan elemen
terkecil pada BST
• Pencarian dimulai dari root dan bergerak ke kiri
terus sepanjang subpohon kiri dan berhenti pada elemen terakhir.
Algoritma dan Struktur Data
Tujuan
• Memahami variant dari Binary Search Tree yang
balanced
Binary Search Tree yang tidak balance dapat membuat seluruh
X X
AVL Trees
• Untuk setiap node dalam tree, ketinggian
subtree di anak kiri dan subtree di anak kanan hanya berbeda maksimum 1.
H
AVL Trees
12
8 16
4 10
2 6
12
8 16
4 10
2 6
14
1
Insertion pada AVL Tree
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:
Kondisi tidak
balance
C A B k1 k2 B k2 A k1 C• Sebuah penambahan
pada subtree:
– A (outside) - case 1 – B (inside) - case 2
• Sebuah penambahan pada
subtree:
– B (inside) - case 3 – C (outside) - case 4
A
k2
B k1
C
C B
A
k1
k2
Single Rotation (case 1)
Single Rotation (case 4)
C k1
B k2
A
A B C
k2
k1
B k2 A k1 C C A B k1 k2
Keterbatasan Single Rotation
• Single rotation tidak bisa digunakan
untuk kasus 2 dan 3 (inside case)
C k3 A k1 D B k2
Double Rotation: Langkah
C k3 A k1 D B k2
C
k3
A
k1
D B
k2
C k3 A k1 D B k2 C k3 A k1 D B k2
Double Rotation
B k1 D k3 A C k2 B k1 D k3 A C k2
Double Rotation
3
Contoh
• penambahan 3 pada AVL tree
11
8 20
4 16
27 8
8
11
4 20
Contoh
• penambahan 5 pada AVL tree
Contoh
• Rotasi ke 2
8
11
5 20
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
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.
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
Delete 55 (Kasus 1)
60
20 70
10 40 65 85
5 15 30 50 80 90
Delete 55 (Kasus 1)
60
20 70
10 40 65 85
5 15 30 50 80 90
Delete 50 (Kasus 2)
60
20 70
10 40 65 85
5 15 30 50 80 90
Delete 50 (Kasus 2)
60
20 70
10 40 65 85
5 15 30 50 80 90
Delete 60 (Kasus 3)
60
20 70
10 40 65 85
5 15 30 50 80 90
55
Delete 60 (Kasus 3)
55
20 70
10 40 65 85
Delete 55 (Kasus 3)
55
20 70
10 40 65 85
5 15 30 50 80 90
Delete 55 (Kasus 3)
50
20 70
10 40 65 85
Delete 50 (Kasus 3)
50
20 70
10 40 65 85
5 15 30 80 90
Delete 50 (Kasus 3)
40
20 70
10 30 65 85
Delete 40 (Kasus 3)
40
20 70
10 30 65 85
5 15 80 90
Delete 40 : Rebalancing
30
20 70
10 65 85
5 15 80 90
Delete 40: setelah
rebalancing
30
70 10
20 65 85
5
15 80 90