Langsung ke konten utama

Binary Search Tree

BINARY SEARCH TREE


Binary Search Tree adalah struktur data yang mengadopsi konsep Binary Tree namun terdapat aturan bahwa setiap clild node sebelah kiri selalu lebih kecil nilainya dari pada root node. Begitu pula sebaliknya, setiap child node sebelah kanan selalu lebih besar nilainya daripada root node. BST juga dikenal sebagai binary tree dengan versi terurut.
Kenapa harus membedakan kiri dan kanan sesuai besaran nilainya? Tujuannya untuk memberikan efisiensi terhadap proses searching. Kalau struktur data tree sudah tersusun rapi sesuai aturan mainnya, proses search akan lebih cepat.

Aturan dalam BST :
1. Setiap child node sebelah kiri harus lebih kecil nilainya daripada root nodenya.
2. Setiap child node sebelah kanan harus lebih besar nilainya daripada root nodenya.

Terdapat 3 oeprasi dasar pada BST:
1. find(x) : untuk mencari key x dalam BST

void find(Node **current, int value){
if((*current) != NULL){
if(value < (*current)->val){
find(&(*current)->left, value);
}
else if(value > (*current)->val){
find(&(*current)->right, value);
}
else{
printf("&d is found", value);
}
}
else{
printf("%d is Not Found.", value);
}
}

2. insert(x) : untuk menaruh key baru pada BST

void insert(Node **current, int value){
if((*current) == NULL){
(*current) = (struct Node*) malloc (sizeof (Node));
(*current)->val = value;
(*current)->left = (*current)->right = NULL;
}
else{
if(value < (*current)->val){
insert(&(*current)->left, value);
}
else{
insert(&(*current)->right, value);
}
}
}

3. remove(x) : untuk menghapus key x pada BST

void remove(Node **current, int value){
if((*current) == NULL){
printf("%d not found in the tree\n", value);
flag = 0;
}
else{
if((*current)->val == value){
if(flag == 0){
if((*current)->left == NULL){
if((*current)->right == NULL){
(*current) = NULL;
}
else{
int mostleftval = rightLeaf(&(*current)->right);
(*current)->val = mostleftval;
}
}
else{
int mostrightval = rightLeaf(&(*current)->right);
(*current)->val = mostrightval;
}
}
else if(flag == 1){
int mostleftval = rightLeaf(&(*current)->right);
(*current)->val = mostleftval;
}
else{
int mostrightval = rightLeaf(&(*current)->right);
(*current)->val = mostrightval;
}
flag = 0;
printf("%d has been deleted from tree\n", value);
}
else{
if(value < (*current)->val){
flag = -1;
remove(&(*current)->left, value);
}
else{
flag = 1;
remove(&(*current)->right, value);
}
}
}
}

Ada 3 cara melakukan penelusuran data (transversal) pada BST :
1. PreOrder : Print data, telusur ke kiri, telusur ke kanan
2. InOrder : Telusur ke kiri, print data, telusur ke kanan
3. Post Order : Telusur ke kiri, telusur ke kanan, print data


sumber :
https://www.mahirkoding.com/struktur-data-binary-search-tree-bst/
slide binusmaya

Komentar

Postingan populer dari blog ini

HEAP

HEAP      Di dalam bidang Teknik Informatika terdapat banyak sekali jenis-jenis algoritma pengurutan yang dapat digunakan untuk memecahkan masalah pengurutan. Oleh karena itu, teknik untuk memilih algoritma pengurutan yang tepat, sesuai dengan kebutuhan, dan mangkus sangat diperlukan karena masing-masing algoritma pengurutan memiliki karakteristik yang berbedabeda. Heap sort merupakan salah satu contoh algoritma pengurutan yang memiliki kompleksitas waktu asimptotik terbaik serta menerapkan teknik yang unik/khas di dalam memecahkan masalah pengurutan, yaitu dengan menggunakan heap tree.  Pengertian Heap Tree:      Secara umum pengertian dari heap adalah bagian dari memori yang terorganisasi untuk dapat melayani alokasi memori secara dinamis.      Suatu heap tree adalah Complete Binary Tree (CBT) di mana harga-harga key pada node-nodenya sedemikian rupa sehingga haga-harga key pada node-node anaknya tidak ada yang lebih besar dari harga k...

Hashing and Tree

HASH TABLE DAN BINARY TREE Hashing adalah teknik dalam struktur data, dimana teknik ini digunakan untuk menyimpan dan mengambil / mencari kata kunci dengan cepat dan efisien. Dalam hashing, string akan ditransformasikan menjadi sebuah kunci yang mewakili string aslinya. Hashing digunakan untuk mengindeks dan menemukan suatu value dengan kata kunci yang lebih pendek. Hashing dilakukan untuk menyimpan data, mencari data, menambah data, dan menghapus data dengan lebih efisien. Hash Table adalah sebuah struktur data yang terdiri atas table dan fungsi yang digunakan untuk menyimpan / menaruh key value yang unik untuk setiap record (baris) menjadi angka (hash). Contoh simplenya : arr[ ] value 0 algo 1 bahaha 2 cat 3 NULL 4 NULL  5 fly 6 go … 25 zebra algo terletak pada arr[0] kar...

AVL Tree and B-Tree

AVL Tree dan Balanced Tree / B-Tree AVL Tree AVL Tree adalah Binary Search Tree yang memiliki perbedaan tinggi/ level maksimal 1 antara subtree kiri dan subtree kanan. AVL Tree muncul untuk menyeimbangkan Binary Search Tree. Dengan AVL Tree, waktu pencarian dan bentuk tree dapat dipersingkat dan disederhanakan yaitu dari yang seharusnya dari O(h) dimana h adalah height dari tree menjadi hanya O(log n). Agar Tree tetap seimbang, maka diberikan batasan sebesar -1, 0, atau 1, dimana batasan ini didapat dari selisih height child kiri dan child kanan. Ada beberapa operasi dalam AVL Tree, yaitu: 1. Insert, dalam insert dapat menyebabkan beberapa masalah miringnya / tidak seimbangnya jumlah child kiri dan child kanan, berikut beberapa masalah yang ada: a. Left-left case dan Right-right case: diselesaikan dengan single rotation yaitu dengan mengambil bagian tengah dari 3 node yang segaris/lurus dan meletakkanya di tengah sebagai parent, dengan 2 node sisanya menjadi cabangnya...