Binary Search Tree

Berikut kodingan saya sendiri mengenai Binary Search Tree.

#include<stdio.h>
#include<stdlib.h>

int flag = 0;


struct node{

int angka;
struct node *left;
struct node *right;
};

struct node *NodeBaru(int InputanAngka){

//bkin structnya buat ditempatin di akar paling bawah
struct node *temp = (struct node*) malloc (sizeof(struct node));
temp->angka = InputanAngka;
temp->left=temp->right=NULL;
}

struct node *MasukkanAngka(struct node *ROOT,int InputanAngka){

//klo misal akar yang ditempatinya NULL yauda tinggal dimasukkin datanya
if(ROOT==NULL){
return NodeBaru(InputanAngka);
}
//bakal pindah akar ke kiri teros klo lebih kecil smpe nemu NULL^
if(InputanAngka < ROOT->angka){
ROOT->left = MasukkanAngka(ROOT->left, InputanAngka);
}
//bakal pindah akar ke kanan teros klo lebih besar dr smua angka smpe nemu NULL^
else if(InputanAngka > ROOT->angka){
ROOT->right = MasukkanAngka(ROOT->right, InputanAngka);
}
}

struct node *CariNode(struct node *root){

struct node *curr = root->left;
while(curr->right!=NULL){
curr = curr->right;
}
return curr;
}

struct node *HapusAngka (struct node *root, int AngkaYangDicari){

//klo data ga ditemukan
if(root==NULL){
flag = 2;
return NULL;
}
//cari angka di root kiri
else if(AngkaYangDicari < root->angka){
root->left = HapusAngka(root->left,AngkaYangDicari);
}
//cari angka di root kanan
else if(AngkaYangDicari > root->angka){
root->right = HapusAngka(root->right,AngkaYangDicari);
}
//angkanya udah ketemu
else{
//ini untuk case klo rootnya punya 1 cabang atau tidak punya sama sekali
if(root->left==NULL||root->right==NULL){
struct node *temp = NULL;
if(root->right!=NULL){
temp=root->right;
}
else{
temp=root->left;
}
//jika tidak mempunyai cabang samsek
if(temp==NULL){
root=NULL;
}
//jika terdapat salah satu cabang
else{
*root = *temp;
}
free(temp);
}
//ini untuk case yang terdapat 2 cabang
else{
//cari node paling kanan di root->left
struct node *temp = CariNode(root);
root->angka=temp->angka;

//deletenya
root->left=HapusAngka(root->left,temp->angka);
}
}
return root;
}

void PrintAll(struct node *root){

//klo misal akar yg diliatnya skrg udah NULL printnya berhenti
if(root!=NULL){
//nge print smua yg dikiri
PrintAll(root->left);
printf("%d\n",root->angka);
//ini biar printnya bisa liat angka yang dikanan
PrintAll(root->right);
}
}

int main(){

int Menu,AngkaInput,AngkaDelete;
//ini biar jadi pusat akarnya
struct node *root = NULL;
do{
if(flag==0){
printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
}
else if (flag==1){
printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
PrintAll(root);
flag=0;
}
else if(flag==2){
printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
printf("Data Tidak Ditemukan!\n");
}
printf("BINARY SEARCH TREE\n");
printf("Menu :\n");
printf("1. Masukkan Angka\n");
printf("2. Hapus Angka\n");
printf("3. Print Angka\n");
printf("4. Exit\n");
printf(">> ");
scanf("%d",&Menu);
if(Menu==1){
printf("Input Angka : ");
scanf("%d",&AngkaInput);
root=MasukkanAngka(root,AngkaInput);
}else if(Menu==2){
printf("Tulis Angka Yang Mau Dihapus : ");
scanf("%d",&AngkaDelete);
root=HapusAngka(root,AngkaDelete);
}else if(Menu==3){
flag=1;
}
}while(Menu!=4);
}

Komentar

Postingan populer dari blog ini

AVL Tree

HEAP and TRIES

Summary