Was this help full if not then comment your views to improve my blog or you can mail me @ raj.nishant360@gmail.com
#include<stdio.h>
#include<stdlib.h>
struct node
{
int data;
struct node *LCHILD;
struct node *RCHILD;
}*tree;
struct stack
{
struct node *addr[100];
int top;
}s,s1,s2;
void push(struct node *val,struct stack *temp)
{
if(temp->top==99)
{
printf("overflow\n");
return ;
}
temp->addr[++temp->top]=val;
}
struct node *pop(struct stack *temp)
{
if(temp->top==-1)
{
printf("under flow\n");
return NULL;
}
return temp->addr[temp->top--];
}
struct node *peep(struct stack * temp)
{
if(temp->top==-1)
return NULL;
return temp->addr[temp->top];
}
struct node *create(int val)
{
struct node *temp;
temp=(struct node*)malloc(sizeof(struct node));
temp->data=val;
temp->LCHILD=NULL;
temp->RCHILD=NULL;
return temp;
}
void add(struct node **tr,int val)
{
struct node *copy,*copy1;
copy=(struct node*)malloc(sizeof(struct node));
copy1=(struct node*)malloc(sizeof(struct node));
copy1=*tr;
if(copy1==NULL)
{
*tr=create(val);
return ;
}
if(val>=copy1->data)
add(&(copy1->RCHILD),val);
else
add(&(copy1->LCHILD),val);
}
void print_postorder(struct node *root)
{
if(root==NULL)
return;
do
{
while(root!=NULL)
{
if(root->RCHILD!=NULL)
push(root->RCHILD,&s2);
push(root,&s2);
root=root->LCHILD;
}
root=pop(&s2);
if(root->RCHILD!=NULL && root->RCHILD==peep(&s2))
{
pop(&s2);
push(root,&s2);
root=root->RCHILD;
}
else
{
printf("%d\t",root->data);
root=NULL;
}
}while(s2.top!=-1);
}
int main()
{
tree=NULL;
s.top=-1;
s1.top=-1;
s2.top=-1;
REPEAT:
printf("ENTER YOUR CHOICE\n");
printf("1->add node to tree\n");
printf("2->print in INORDER tree\n");
printf("3->exit\n");
int choice,val;
scanf("%d",&choice);
switch(choice)
{
case 1:
scanf("%d",&val);
add(&tree,val);
break;
case 2:
print_postorder(tree);
break;
case 3:
exit(2);
default:
printf("your choice is incorrect\n");
}
goto REPEAT;
return 0;
}
No comments:
Post a Comment
Your comment is valuable to us