#include<stdio.h>
#include<stdlib.h>
struct Node
{
int info;
struct Node *left;
struct Node *right;
};
typedef struct stack
{
long int data[200];
int top;
}stack;
void init(stack *);
int pop(stack *);
void push(struct Node *,stack *);
struct Node *insert_node(struct Node *,int);
void inorder(struct Node *);
void postorder(struct Node *);
void preorder(struct Node *);
int main(void)
{
struct Node *root= NULL;
int choice, item,item2,count=0;
stack s;
char x;
//int op1,op2,val;
init(&s);
printf("Enter a postfix expression:\n");
//printf("root");
while((x=getchar())!='\n')
{
if(isdigit(x)){
root=(struct Node*)malloc(sizeof(struct Node));
root->info = x-48;
root->left = NULL;
root->right = NULL;
push(root,&s); //x-48 for removing the effect of ASCII
}else
{
root=(struct Node*)malloc(sizeof(struct Node));
root->info = x;
root->left = NULL;
root->right = NULL;
//return(root);
//root= insert_node(root,x);
item=pop(&s);
item2=pop(&s);
root= insert_node(root,item2);
root= insert_node(root,item);
push(root,&s);
}
}
//pop(&s);
inorder(root);
}
void init(stack *s)
{
s->top=-1;
}
void push(struct Node *root,stack *s)
{
s->top=s->top+1;
s->data[s->top]=root;
}
int pop(stack *s)
{
long int x;
x=s->data[s->top];
s->top=s->top-1;
return(x);
}
struct Node *insert_node(struct Node *root, int x)
{
if(root->left == NULL)
root->left = x;
else
{
if(root->right == NULL)
root->right = x;
}
return(root);
}
void inorder(struct Node *root)
{
if(root != NULL)
{
inorder(root->left);
if(root->info==43){
printf("+");
}else if(root->info==45){
printf("-");
}else if(root->info==42){
printf("*");
}else if(root->info==47){
printf("/");
}else if(root->info==37){
printf("%");
}else{
printf("%d",root->info);
}
inorder(root->right);
}
return;
}
void postorder(struct Node *root)
{
if(root != NULL)
{
postorder(root->left);
postorder(root->right);
printf(" %d",root->info);
}
return;
}
void preorder(struct Node *root)
{
if(root != NULL)
{
printf(" %d",root->info);
preorder(root->left);
preorder(root->right);
}
return;
}
No comments:
Write comments