DS – Code implementation from Prefix to Postfix:

#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–];
}
Scroll to Top