This Program is for Binary Search Tree and Traversal in C, and is part of Mumbai University MCA Colleges Data Structures in C program MCA Sem 2
}
Hope this Program is useful to you in some sense or other. Keep on following this blog for more Mumbai University MCA College Programs. Happy Programming and Studying.
# include <stdio.h>
#include<conio.h>
# include <malloc.h>
struct node
{
int info;
struct node *lchild;
struct node *rchild;
}*root,*t;
struct node* search(struct
node* ptr,int info);
void find(int item,struct
node **par,struct node **loc);
void insert(int item);
void del(int item);
void case_a(struct node
*par,struct node *loc );
void case_b(struct node
*par,struct node *loc);
void case_c(struct node
*par,struct node *loc);
void preorder(struct node
*ptr);
void inorder(struct node
*ptr);
void postorder(struct node
*ptr);
void display(struct node
*ptr,int level);
int item,n;
void main()
{
struct node *ptr;
int info;
int choice,num;
clrscr();
root=NULL;
printf("\n\n==============
BINARY SEARCH TREE ============\n\n");
while(1)
{
printf("\n\n------------- MAIN MENU
--------------------\n\n");
printf("\n1.Insert\n\n");
printf("\n2.Delete\n\n");
printf("\n3.Inorder Traversal\n\n");
printf("\n4.Preorder Traversal\n\n");
printf("\n5.Postorder Traversal\n\n");
printf("\n6.Search\n\n");
printf("\n7.Display\n\n");
printf("\n8.Exit\n\n");
printf("\nEnter your choice : ");
scanf("%d",&choice);
switch(choice)
{
case 1:
printf("\n\n~~~~~~~~~~~~~~~
INSERTION ~~~~~~~~~~~~~~~~\n\n");
printf("\nEnter the number to be
inserted : ");
scanf("%d",&num);
insert(num);
break;
case 2:
printf("\n\n~~~~~~~~~~~~~~~
DELETION ~~~~~~~~~~~~~~~~\n\n");
printf("\nEnter the number to be
deleted : ");
scanf("%d",&num);
del(num);
break;
case 3:
printf("\n\n~~~~~~~~~~~~~~~
INORDER TRAVERSAL ~~~~~~~~~~~~~~~~\n\n");
inorder(root);
break;
case 4:
printf("\n\n~~~~~~~~~~~~~~~
PREORDER TRAVERSAL ~~~~~~~~~~~~~~~~\n\n");
preorder(root);
break;
case 5:
printf("\n\n~~~~~~~~~~~~~~~
POSTORDER TRAVERSAL ~~~~~~~~~~~~~~~~\n\n");
postorder(root);
break;
case 6:
printf("\n\n~~~~~~~~~~~~~~~
SEARCHING ~~~~~~~~~~~~~~~~\n\n");
printf("\nEnter the node to be
searched :");
scanf("%d",&info);
ptr=search(ptr,info);
if(ptr==NULL)
{
printf("\n\n------------------------\n\n");
printf("\nSEARCH ELEMENT NOT
FOUND");
printf("\n\n------------------------\n\n");
}
else
{
printf("\n\n------------------------\n\n");
printf("\nSEARCHED ELEMENT IS
%d",ptr->info);
printf("\n\n------------------------\n\n");
}
break;
case 7:
printf("\n\n~~~~~~~~~~~~~~~
DISPLAYING ~~~~~~~~~~~~~~~~\n\n");
display(root,1);
break;
case 8:
exit();
default:
printf("\n\nINVALID ENTRY !!!!! TRY
AGAIN\n\n");
}
}
getch();
}
void find(int item,struct
node **par,struct node **loc)
{
struct node *ptr,*ptrsave;
if(root==NULL)
{
*loc=NULL;
*par=NULL;
return;
}
if(item==root->info)
{
*loc=root;
*par=NULL;
return;
}
if(item<root->info)
ptr=root->lchild;
else
ptr=root->rchild;
ptrsave=root;
while(ptr!=NULL)
{
if(item==ptr->info)
{
*loc=ptr;
*par=ptrsave;
return;
}
ptrsave=ptr;
if(item<ptr->info)
ptr=ptr->lchild;
else
ptr=ptr->rchild;
}
*loc=NULL;
*par=ptrsave;
}
void insert(int item)
{ struct node *tmp,*parent,*location;
find(item,&parent,&location);
if(location!=NULL)
{
printf("\n\n------------------------------\n\n");
printf("\nITEM ALREADY PRESENT");
printf("\n\n------------------------------\n\n");
return;
}
tmp=(struct node *)malloc(sizeof(struct node));
tmp->info=item;
tmp->lchild=NULL;
tmp->rchild=NULL;
if(parent==NULL)
root=tmp;
else
if(item<parent->info)
parent->lchild=tmp;
else
parent->rchild=tmp;
}
void del(int item)
{
struct node *parent,*location;
if(root==NULL)
{
printf("\n\n------------------------------\n\n");
printf("\nTREE IS EMPTY");
printf("\n\n------------------------------\n\n");
return;
}
find(item,&parent,&location);
if(location==NULL)
{
printf("\n\n------------------------------\n\n");
printf("\nITEM NOT PRESENT IN TREE");
printf("\n\n------------------------------\n\n");
return;
}
if(location->lchild==NULL &&
location->rchild==NULL)
case_a(parent,location);
if(location->lchild!=NULL &&
location->rchild==NULL)
case_b(parent,location);
if(location->lchild==NULL &&
location->rchild!=NULL)
case_b(parent,location);
if(location->lchild!=NULL &&
location->rchild!=NULL)
case_c(parent,location);
free(location);
}
void case_a(struct node
*par,struct node *loc )
{
if(par==NULL)
root=NULL;
else
if(loc==par->lchild)
par->lchild=NULL;
else
par->rchild=NULL;
}
void case_b(struct node
*par,struct node *loc)
{
struct node *child;
if(loc->lchild!=NULL)
child=loc->lchild;
else
child=loc->rchild;
if(par==NULL )
root=child;
else
if( loc==par->lchild)
par->lchild=child;
else
par->rchild=child;
}
void case_c(struct node
*par,struct node *loc)
{
struct node *ptr,*ptrsave,*suc,*parsuc;
ptrsave=loc;
ptr=loc->rchild;
while(ptr->lchild!=NULL)
{
ptrsave=ptr;
ptr=ptr->lchild;
}
suc=ptr;
parsuc=ptrsave;
if(suc->lchild==NULL && suc->rchild==NULL)
case_a(parsuc,suc);
else
case_b(parsuc,suc);
if(par==NULL)
root=suc;
else
if(loc==par->lchild)
par->lchild=suc;
else
par->rchild=suc;
suc->lchild=loc->lchild;
suc->rchild=loc->rchild;
}
void preorder(struct node
*ptr)
{
if(root==NULL)
{
printf("\n\n----------------------------\n\n");
printf("\nTREE IS EMPTY");
printf("\n\n----------------------------\n\n");
return;
}
if(ptr!=NULL)
{
printf("%d
",ptr->info);
preorder(ptr->lchild);
preorder(ptr->rchild);
}
}
void inorder(struct node
*ptr)
{
if(root==NULL)
{
printf("\n\n----------------------------\n\n");
printf("\nTREE IS EMPTY");
printf("\n\n----------------------------\n\n");
return;
}
if(ptr!=NULL)
{
inorder(ptr->lchild);
printf("%d
",ptr->info);
inorder(ptr->rchild);
}
}
void postorder(struct node
*ptr)
{
if(root==NULL)
{
printf("\n\n----------------------------\n\n");
printf("\nTREE IS EMPTY");
printf("\n\n----------------------------\n\n");
return;
}
if(ptr!=NULL)
{
postorder(ptr->lchild);
postorder(ptr->rchild);
printf("%d
",ptr->info);
}
}
void display(struct node
*ptr,int level)
{
int i;
if ( ptr!=NULL )
{
display(ptr->rchild, level+1);
printf("\n");
for (i = 0; i < level; i++)
printf(" ");
printf("%d", ptr->info);
display(ptr->lchild, level+1);
}
}
struct node* search(struct
node *ptr,int info)
{
if(ptr!=NULL)
if(info< ptr->info)
ptr=search(ptr->lchild,info);
else if(info > ptr->info)
ptr=search(ptr->rchild,info);
return(ptr);
Hope this Program is useful to you in some sense or other. Keep on following this blog for more Mumbai University MCA College Programs. Happy Programming and Studying.
Download
No comments:
Post a Comment