#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct node
{
char c;
struct node *left;
struct node *right;
};
struct node *stk[20], *temp, *root;
char prefix[20],ch;
int top=-1, max=20, len;
void post(struct node*);
void exptree();
void push(struct node*);
struct node* pop();
int main()
{
printf("Enter Prefix expression : ");
scanf("%s", prefix);
exptree();
printf("Postfix expression is : ");
post(root);
return 0;
}
void post(struct node *p)
{
if(p != NULL)
{
post(p->left);
post(p->right);
printf("%c", p->c);
}
}
void exptree()
{
int i;
len = strlen(prefix);
i=len-1;
while(i>=0)
{
switch(prefix[i])
{
case '+' :
case '-' :
case '*' :
case '/' :
case '%' : temp = (struct node*)malloc(sizeof(struct node));
temp->c = prefix[i];
temp->left = pop();
temp->right = pop();
push(temp);
break;
default : temp = (struct node*)malloc(sizeof(struct node));
temp->c = prefix[i];
temp->left = NULL;
temp->right = NULL;
push(temp);
break;
}
--i;
}
root = pop();
}
void push(struct node *p)
{
if(top==max)
printf("Stack is Full \n");
else
stk[++top] = p;
}
struct node* pop()
{
if(top==-1)
printf("Invalid expression \n");
else
return stk[top--];
}
No Comments