Binary Search Tree
Binary Search Tree
OPERASI INSERT
Operasi insert pada Binary Search Tree dilakukan dengan cara mencari lokasi untuk node yang
akan
di insert. Pencarian selaku dimulai dari ROOT, jika node yang akan diinsert ternyata lebih kecil
dari
ROOT, maka akan dilakukan insert pada left sub tree sedangkan bila node yang akan diinsert
lebih
besar dari ROOT, maka akan dilakukan insert pada right sub tree. Pencarian lokasi untuk node
diteruskan sampai memenuhi kondisi Binary Search Tree yaitu semua node yang berada pada
left
sub tree lebih kecil dari parentnya, sedangkan yang berada pada right sub tree harus lebih besar
dari
parentnya.
Berikut ini akan dilakukan operasi insert, yang langsung akan digambarkan Binary Search Tree
setelah dilakukan operasi insert
insert (20)
insert (50)
insert (40)
OPERASI DELETEKEY
Berbeda dengan Binary Tree dimana penghapusan harus dilakukan terhadap sebuah sub tree,
maka
pada Binary Seacrh Tree, penghapusan dapat dilakukan terhadap sebuah node (key) tertentu.
Operasi deletekey dapat mengakibatkan Binary Search Tree menjadi tidak urut lagi, sehingga
perlu
dilakukan rotasi terhadap Binary Search Tree tersebut agar menjadi urut kecuali, beberapa posisi
node pada saat dilakukan operasi deletekey adalah :
1. Node yang dihapus adalah LEAF, sehingga penghapusan akan tetap membuat Binary Search
Tree terurut. Bila yang terjadi adalah ini, maka operasi penghapusan dapat langsung
dilakukan.
2. Node yang dihapus adalah node yang memiliki node 1 child, sehingga child yang
bersangkutan dapat langsung dipindahkan untuk menggantikan posisi node yang dihapus.
3. Node yang akan dihapus memiliki 2 children (2 subtree), maka node yang diambil untuk
menggantikan posisi node yang dihapus adalah :
a. Bisa berasal dari left sub tree, dimana node yang diambil adalah node yang
mempunyai nilai paling besar (yang berada pada posisi paling kanan).
b. Bisa berasal dari Right Sub Tree, dimana node yang diambil adalah node yang
mempunyai nilai paling kecil (yang berada pada posisi paling kiri).
Dengan menggunakan gambar Binary Search Tree berikut ini ,akan diilustrasikan operasi
deletekey
untuk masing-masing kondisi di atas.
Posisi 1: jika yang didelete adalah LEAF, maka tidak perlu dilakukan modifikasi terhadap lokasi
contoh :
Posisi 2 : jika yang didelete adalah NODE yang hanya memilki 1 child, maka child tersebut
langsung
menggantikan parentnya contoh :
POSISI 3: jika yang didelete adalah NODE dengan 2 children ( 2 Subtree), maka node yang
diambil
untuk menggantikan posisi node yang dihapus adalah :
1. Berasal dari LEFT SUB TREE, yang diambil adalah node yang paling kanan
(yang mempunyai nilai yang terbesar)
2. Atau dari RIGHT SUBTREE, yang diambil adalah node yang paling kiri ( yang
mempunyai nilai yang terkecil).
Bila dilakukan pencarian terhadap node n diatas, maka pencarian sama seperti dilakukan pada
Binary
Search Tree, yaitu pencarian menjadi sekuensi, yang memakan waktu lama, hal ini tidak
mungkin
terjadi pada AVL Tree karena perbedaan height dibatasi maksimal hanya 1. berikut ini adalah
contoh
ATL Tree dan yang bukan AVL Tree.
Bila dilakukan pencarian terhadap node n diatas, maka pencarian sama seperti dilakukan pada
Binary
Search Tree, yaitu pencarian menjadi sekuensi, yang memakan waktu lama, hal ini tidak
mungkin
terjadi pada AVL Tree karena perbedaan height dibatasi maksimal hanya 1. berikut ini adalah
contoh
ATL Tree dan yang bukan AVL Tree.
Path pencarian lokasi untuk penentuan lokasi elemen pada operasi INSERT disebut dengan
Searching Path. Bila node pada search Path yang balancenya TallLeft (tanda-) tau TallRight
(tanda +)
dan terletak paling dekat dengan node yang baru maka node tersebut dinamakan PIVOT POINT.
Gambar di bawah ini menunjukan pivot point :
OPERASI INSERT
Agar AVL Tree dapat tetap mempertahankan Height-Balanced 1-Tree maka setiap kali
pelaksanaan
operasi insert, jika diperlukan maka harus dilakukan rotasi. Operasi insert dalam AVL Tree ada 3
kondisi / kasus , yaitu :
Case 1
Tidak ada Pivot Point dan setiap node adalah balance, maka bisa langsung diinsert sama
seperti pada Binary Search Tree (tanpa perlu diregenerate)
Case 2
Jika ada Pivot Point tetapi subtree yang akan ditambahkan node baru memiliki height yang
lebih kecil, maka bisa langsung diinsert .
Case 3
Jika ada Pivot point dan subtree yang akan ditambahkan node baru memiliki height yang lebih
besar, maka tree harus diregenerate , supaya tetap menghasilkan AVL Tree. Cara melakukan
Contoh 1
(a) menunjukan sebelum ditambah angka 25, sedangkan gambar (b) menunjukkan setelah
ditambahkan angka 25 dan dilakukan Double Rotation
kasus 2
Double Rotation
Pada beberapa kasus di AVL tree dapat diselesaikan hanya dengan cara single rotation, seperti
pada
contoh diatas, tetapi ada pula yang tidak dapat diselesaikan hanya dengan single rotation, itu
artinya
kita harus menggunakan teknik double rotation untuk menyelesaikan masalah imbalance pada
tree.
Kasus 1
Operasi Delete
Operasi delete dalam AVL Tree adalah sama dengan operasi Deletekey dalam Binary Search
Tree
(3 kasus yang bisa terjadi ). Yang harus diperhatikan adalah harus diusahakan agar pohon asli
Delete
tetap berupa AVL-Tree yaitu dengan melakukan rotasi.