Friday, 24 February 2017

C Program to implement Binary Search Tree ( BST ) Insertion , Deletion and Inorder traversal.

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
typedef struct tree
{
int info;
struct tree *left,*right;
}s;
s *root=NULL;
s * insert(s *,int );
void inorder(s *);
s* del(s*,int);
main()
{
int ch,item;
printf("1.insert\n2.display Inorder Traversal \n3.delete\n4.exit");
while(1)
{
printf("\nenter your choice :");
scanf("%d",&ch);
switch(ch)
{
case 1:
  printf("enter item to be insert : ");
  scanf("%d",&item);
  root=insert(root,item);
  break;
case 2:
      inorder(root);
  break;
case 3:
  printf("enter item to be deleted : ");
  scanf("%d",&item);
      root=del(root,item);
  break;
case 4:
      exit(1);
default:
      printf("enter choice again");      
}
}
getch();
}
s* insert(s *root,int key)
{
s*ptr,*tmp,*par;
ptr=root;
tmp=(s *)malloc(sizeof(s));
tmp->info=key;
while(ptr!=NULL)
{
par=ptr;
if(key>ptr->info)
ptr=ptr->right;
else
ptr=ptr->left;
}
if(root==NULL)
{
root=tmp;
root->left=root->right=NULL;
}
else
{
ptr=tmp;
ptr->left=ptr->right=NULL;
if(par->info>key)
par->left=ptr;
else
par->right=ptr;
}
return root;
}
void inorder(s *root)
{
s*p;
p=root;
if(p==NULL)
    return ;
    inorder(p->left);
printf("%d  ",p->info);
inorder(p->right);
}
s* del(s *root,int item)
{
    s *ptr,*par,*parsucc,*succ,*child;
ptr=root;
par=NULL;
while(ptr!=NULL)
{
if(item==ptr->info)
break;
par=ptr;
if(item<ptr->info)
ptr=ptr->left;
else
ptr=ptr->right;

}
if(ptr==NULL)
{
printf("key is not present");
return root;
}
if(ptr->left!=NULL&&ptr->right!=NULL)
{
parsucc=ptr;
succ=ptr->right;
while(succ->left!=NULL)
{
parsucc=succ;
succ=succ->left;
}
ptr->info=succ->info;
ptr=succ;
par=parsucc;
}
if(ptr->left!=NULL)
   child=ptr->left;
else
   child=ptr->right;
if(par==NULL)
root=child;
else if(ptr==par->left)  
      par->left=child;
      else
      par->right=child;

free(ptr);
return root;
}

OUTPUT :

No comments:

Post a Comment