Binary Search Tree
Sub Topics :
Binary Search Tree :
1. Operations : Search, Insertion, Deletion
2. Program Examples
3. Expression Tree Concept
4. Create Expression Tree from Prefix
5. Create Expression Tree from Postfix
6. Create Expression Tree from Infix
7. Prefix, Postfix, Infix, Traversal
Binary Search Tree Operations
Binary Search Tree memiliki operasi dasar yaitu :
1. find(x) : untuk mencari nilai “x” di dalam binary search tree
2. insert(x) : untuk menambah nilai “x” kedalam binary search tree
3. remove(x) : untuk menghapus nilai “x” dari binary search tree
Operasi : Search
Karena binary search tree tidak bersifat linear jadi untuk pencarian data lebih mudah.
Contoh :
- Jika key yang ingin kita cari adalah X.
- Kita memulai dari bagian root pada tree
- Jika root berisi X maka search berakhir dan pencarian ditemukan.
- Jika nilai X lebih kecil dari root, maka cari secara rekursif pada sub-tree yang sebelah kiri, jika tidak ditemukan cari secara rekursif di sub-tree yang sebelah kanan.
Dan codenya adalah :
struct node* search (struct node *curr, int X) {
if ( curr == NULL ) return NULL;
// X is found
if ( X == curr->data ) return curr;
// X is located in left sub tree
if ( X < curr->data ) return find(curr->left, X);
// X is located in right sub tree
return find(curr->right, X);
}
Operasi : Insertion
Untuk melakukan insert dalam binary search tree dapat dilakukan dengan rekursif
Contoh :
Jika X adalah node baru yang ingin di input
- Dimulai dari root
- Jika nilai X kurang dari key node, maka input X ke dalam sub-tree kiri. Jika tidak, maka masukkan X ke dalam sub-tree kanan.
- Ulangi hingga kita menemukan node kosong untuk menginput X ( X akan selalu menjadi leaf baru).
Dan algoritmanya adalah :
Step 1: IF TREE = NULL, then
Allocate memory for TREE
SET TREE->DATA = VAL
SET TREE->LEFT = TREE ->RIGHT = NULL
ELSE
IF VAL < TREE->DATA
Insert(TREE->LEFT, VAL)
ELSE
Insert(TREE->RIGHT, VAL)
[END OF IF]
[END OF IF]
Step 2: End
Contoh dengan Ilustrasinya seperti berikut :
Kita ingin menginput node baru bernilai 35.
Lakukan perbandingan muali dari root, jika nilai node baru lebih besar dari root maka liat perbandingan selanjutnya di sub-tree sebelah kanan, pada contoh di atas nilai node baru lebih besar dari pada root 35 > 30, maka di cek di node kanan selanjutnya apakah node baru lebih besar daripada node tersebut.
Pada contoh di atas, node baru lebih kecil dari node yang ditunjuk 35 < 37, maka lakukan perbandingan selanjutnya di node child sebelah kiri dari node yang ditunjuk (37).
Lalu lakukan perbandingan lagi, pada BST tersebut node baru lebih besar daripada node yang ditunjuk 35 > 32. Maka node tersebut di insert pada node child sebelah kanan dari node yang di tunjuk (32). Maka hasil akhirnya menjadi :
Operasi : Deletion
Ada 3 kemungkinan yang ada pada operasi delete pada binary search tree :
1. Jika key yang ingin dihapus berada pada leaf, maka tinggal hapus saja node tersebut.
2. Jika key yang ingin dihapus memiliki 1 child, hapus node tersebut dan hubungkan child ke parentnya dari parent child itu.
3. Jika key yang ingin dihapus memiliki 2 children, lalu temukan child yang paling kanan dari sub-tree kirinya (node X), replace key dengan key P dan remove P secara rekursif (atau secara bergantian kita dapat memilih anak yang paling kiri dari sub-tree kanan).
Algoritmanya adalah :
Step 1: IF TREE = NULL, then
Write “VAL not found in the tree”
ELSE IF VAL < TREE->DATA
Delete(TREE->LEFT, VAL)
ELSE IF VAL > TREE->DATA
Delete(TREE->RIGHT, VAL)
ELSE IF TREE->LEFT AND TREE->RIGHT
SET TEMP = findLargestNode(TREE->LEFT)
SET TREE->DATA = TEMP->DATA
Delete(TREE->LEFT, TEMP->DATA)
ELSE
SET TEMP = TREE
IF TREE->LEFT = NULL AND TREE ->RIGHT = NULL
SET TREE = NULL
ELSE IF TREE->LEFT != NULL
SET TREE = TREE->LEFT
ELSE
SET TREE = TREE->RIGHT
FREE TEMP
Step 2: End
contoh operasi deletion dengan ilustasi :
jika kita ingin menghapus nilai 21 pada BST dan nilai 21 berada pada leaf.
maka, tinggal hapus nilai 21 tersebut.
Jika kita ingin menghapus nilai 37 pada BST tersebut, maka turunan dari node tersebut sebelah kiri yang paling besar di hubungkan ke atas.
Lalu 35 pindah ke node tempat node yang di hapus (37).
Jika kita ingin menghapus node 30, maka cari nilai yang paling besar dari sub-tree kiri. Pada BST tersebut (26).
Lalu, 30 dihapus dan node 26 dipindahkan ke atas (posisi node 30).




















