Binary Search Tree

Untuk Hari ini saya belajar Binary Search Tree yang adalah konsep penyimpanan data secara terstruktur yaitu data yang dimasukan disimpan di dalam sebuah tree yaitu setiap data disebut sebagai node node dan data pertama disebut root , lalu untuk data yang paling bawah atau tidak mempunyai cabang lagi disebut leaf.

 untuk cara membuat suatu BST adalah

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

struct node{
    int data;
    node* left;
    node* right;
};

node* createNode(int data){
    node *temp = (node*)malloc(sizeof(node));
    temp->data = data;
    temp->left = temp->right= NULL;
    return temp;
}

node* insert(node* rootPos,int data){
    if(rootPos == NULL){
        return createNode(data);
    }
    else{
        if(data<rootPos->data){
            rootPos->left = insert(rootPos->left,data);
        }
        else if(data>rootPos->data){
            rootPos->right = insert(rootPos->right,data);
        }
    }
    return rootPos;
}

void inOrder(node* root){
    if(root != NULL){
        inOrder(root->left);   
        printf("%d ->",root->data);
        inOrder(root->right);
    }
}

node *succesor(node *root){
    if(root->left != NULL){
        root->left = succesor(root->left);
    }
    return root;
}

node* Del(node* rootPos,int data){
    if(rootPos == NULL){
        return NULL;
    }
    else{
        if(data<rootPos->data){
            rootPos->left = Del(rootPos->left,data);
        }
        else if(data>rootPos->data){
            rootPos->right = Del(rootPos->right,data);
        }
        else{
            if(rootPos->left == NULL || rootPos->right == NULL){
                node *temp = rootPos->left;
                if(temp == NULL){
                    temp = rootPos->right;
                }
                if(temp == NULL){
                    temp = rootPos;
                    rootPos = NULL;
                    free(temp);
                }
                else if(temp != NULL){
                    *rootPos = *temp;
                    free(temp);
                }
            }
            else{
                node* temp = succesor(rootPos->right);
                rootPos->data = temp->data;
                rootPos->right = Del(rootPos->right,temp->data);
            }
        }
    }
    return rootPos;
}

int main(int args,char **argv){
    node* root = NULL;
    root = insert(root,30);
    insert(root,20);
    insert(root,40);
    Del(root,20);
    inOrder(root);
    return 0;
}

Komentar