#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 :
#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 :