bst.c
142 linesc
DOWNLOAD
1// Aim: Program to perform Binary Search Tree (BST) operations (Insertion, Deletion).
2#include<stdio.h>
3#include<stdlib.h>
4
5struct node {
6    int data;
7    struct node *left;
8    struct node *right;
9};
10
11int ch , item ,flag = 0;
12struct node *root = NULL,*ptr=NULL,*parent=NULL,*new;
13
14void insert(){
15    printf("\nEnter item to insert: ");
16    scanf("%d", &item);
17    if(root == NULL){
18        struct node *new = (struct node *)malloc(sizeof(struct node));
19        new->data = item;
20        new->left = NULL;
21        new->right = NULL;
22        root = new;
23    }else{
24        ptr = root;
25        flag = 0;
26        while(ptr != NULL && flag == 0){
27            if(ptr->data == item){
28                printf("\nDuplicate item");
29                flag = 1;
30                return;
31            }else if(ptr->data > item){
32                parent = ptr;
33                ptr = ptr->left;
34            }else{
35                parent = ptr;
36                ptr = ptr->right;
37            }    
38        }
39        if(ptr == NULL){
40            struct node *new = (struct node *)malloc(sizeof(struct node));
41            new->data = item;
42            new->left = NULL;
43            new->right = NULL;
44            if(parent->data > item){
45                parent->left = new;
46            }else{
47                parent->right = new;
48            }
49        }   
50    }
51}
52
53void inorder(struct node *ptr){
54    if(ptr != NULL){
55        inorder(ptr->left);
56        printf("%d ",ptr->data);
57        inorder(ptr->right);
58    }
59}
60
61struct node *insucc(struct node *y){
62    while(y->left != NULL){
63        y = y->left;
64    }
65    return y;
66}
67
68void delete(int item){
69    if(root == NULL){
70        printf("\nTree is empty");
71        return;
72    }
73    else{
74        ptr = root;
75        flag = 0;
76        while(ptr != NULL && flag == 0){
77            if(ptr->data == item){
78                flag = 1;
79            }else if(ptr->data > item){
80                parent = ptr;
81                ptr = ptr->left;
82            }else{
83                parent = ptr;
84                ptr = ptr->right;
85            }
86        }
87        if(flag == 0){
88            printf("\nItem not found");
89            return;
90        }
91        else{
92        if(ptr->left == NULL && ptr->right == NULL){
93            if(parent->left == ptr){
94                parent->left = NULL;
95            }else{
96                parent->right = NULL;
97            }
98            free(ptr);
99        }else if(ptr->left != NULL && ptr->right == NULL){
100            if(parent->left == ptr){
101                parent->left = ptr->left;
102            }else{
103                parent->right = ptr->left;
104            }
105            free(ptr);
106        }else if(ptr->left == NULL && ptr->right != NULL){
107            if(parent->left == ptr){
108                parent->left = ptr->right;
109            }else{
110                parent->right = ptr->right;
111            }
112            free(ptr);
113        }else{
114            struct node *succ = insucc(ptr->right);
115            printf("\nInorder successor is %d",succ->data);
116            int x = succ->data;
117            delete(x);
118            ptr->data = x;
119        }
120        }
121    }
122}
123
124void main(){
125    int choice;
126    while(1){
127        printf("\n1. Insert\n2. Delete\n3. Inorder\n4. Exit\nEnter choice: ");
128        scanf("%d",&choice);
129        switch(choice){
130            case 1: insert();
131                    break;
132            case 2: printf("\nEnter item to delete: ");
133                    scanf("%d",&item);
134                    delete(item);
135                    break;
136            case 3: inorder(root);
137                    break;
138            case 4: exit(0);
139        }
140    }
141}
142