Vous êtes sur la page 1sur 4

#include<stdio.

h>
#include<conio.h>
#include<alloc.h>
typedef struct node
{
struct node *left;
int data;
struct node *right;
}Tree;
Tree *root=NULL,*p,*q;
void create_tree(Tree *,int);
Tree * insertElement(Tree *,int,int);
void preorderTraversal(Tree *);
void inorderTraversal(Tree *);
void postorderTraversal(Tree *);
Tree *deleteElement(Tree *,int);
Tree search(Tree *,int);
int main()
{
int ch,val,rl,node;
clrscr();
create_tree(root,val);
printf("\n1.Insert Element");
printf("\n2.Preorder Traversal");
printf("\n3.Inorder Traversal");
printf("\n4.Postorder Traversal");
printf("\n5.Delete Element");
printf("\n6.Exit");
do
{
printf("\n Enter your option:");
scanf("%d",&ch);
switch(ch)
{
case 1:printf("\n Enter the value of the new node:");
scanf("%d",&val);
insertElement(root,node,val);
break;
case 2:printf("\n The elements of tree in preorder
traversal:");
preorderTraversal(root);
break;
case 3:printf("\n The elements of tree in inorder
traversal:");
inorderTraversal(root);
break;
case 4:printf("\n The elements of tree in postorder
traversal:");
postorderTraversal(root);
break;
case 5:printf("\n Enter element to be deleted:");
scanf("%d",&val);
deleteElement(root,val);
break;
case 6:exit(1);
}
}while((ch>0)&&(ch<7));
getch();
return(0);
}
void create_tree(Tree *p,int val)
{
p=(Tree*)malloc(sizeof(Tree));
p->data=val;
p->left=p->right=NULL;
}
Tree * insertElement(Tree * root,int node,int val)
{
int rl;
if(root==NULL)
root=p;
else
{
q=NULL;
q=search(root,node);
if(q==NULL)
printf("Node doesn't exist");
else
{
printf("Insert R/L?'0' for LEFT...'1' for RIGHT \n");
scanf("%d",&rl);
if(rl==0)
{
if(q->left==NULL)
q->left=p;
else
printf("Already has left child\n");
}
else if(rl==1)
{
if(q->right==NULL)
q->right=p;
else
printf("Already has right child");
}
}
}

Tree *search(Tree * root,int node)


{
if(root!=NULL)
{
if(root->data==node)
return root;
else
{
search(root->left,node);
search(root->right,node);
}
}
}
void inorderTraversal(Tree *root)
{
if(root!=NULL)
{
inorder(root->left);
printf("%3d",root->data);
inorder(root->right);
}
}
void preorder(Tree * root)
{
if(root!=NULL)
{
printf("%3d",root->data);
preorder(root->left);
preorder(root->right);
}
}
void postorder(Tree * root)
{
if(root!=NULL)
{
postorder(root->left);
postorder(root->right);
printf("%3d",root->data);
}
}
Tree * deleteElement(Tree * root,int val)
{
Tree *ptr1,ptr2;
if(root==NULL)
{
printf("\n The tree is empty");
return(1);
}
p=root;
q=searchparent(*root,val)
if(q!=NULL)
{
ptr1=q->left;
ptr2=q->right;
if(ptr1->data==val)
{
if(ptr1->left==NULL&&ptr1->right==NULL)
p->left=NULL;
else
printf("\n Node is not leaf node.No deletion");
}
else
{
if(ptr2->left==NULL&&ptr2->right==NULL)
p->right=NULL;
else
printf("\n Node is not a leaf node.No deletion");
}
}
else
printf("\n Node with data item doesn't exist.Deletion
fails");
}
Tree *searchparent(Tree * root,int val)
{
p=root;
if(root->data!=val)
{
ptr1=root->left;
ptr2=root->right;
if(ptr!=NULL)
searchparent(ptr1);
else
p=NULL;
if(ptr2!=NULL)
searchparent(ptr2);
else
p=NULL;
}
}
}

Vous aimerez peut-être aussi