Prefix to Infix conversion using stack

Write a program to convert Prefix to Infix using stack 

Example 1:

Input: prefix= "+A+*BC*/EF^GH"
Output: infix="A+B*C+E/F*G^H"

Approach :

Java

import java.util.HashMap;
import java.util.Stack;

public class PrefixToInfix {
    public static void main(String[] args) {
        // prefix
        String prefix = "+A+*BC*/EF^GH";
        // prefix to infix
        String infix = prefixToInfix(prefix);
        System.out.println("Infix is " + infix);
    }

    private static String prefixToInfix(String prefix) {
        String infix = "";
        // stack for hold operator
        Stack<Stringstack = new Stack<>();
        // Iterate till given prefix length
        for (int i = prefix.length() - 1; i >= 0; i--) {
            // hold char from postFIx
            char c = prefix.charAt(i);
            // If letter then add into stack
            if (Character.isLetter(c)) {
                stack.add(String.valueOf(c));
            } else {
                // rule = first+operator+second
                String a = stack.pop();
                String b = stack.pop();
                stack.add(a + "" + c + "" + b);
            }

        }
        // iterate till stack is empty
        while (!stack.isEmpty()) {
            infix += stack.pop();
        }
        return infix;
    }

}

C++

#include <bits/stdc++.h>
using namespace std;

//function to convert from
//prefix to infix
string prefixToInfix(string prefix
{
    string infix = "";
    // stack for hold operator
    stack<stringstack;
    // Iterate till given prefix length
    for (int i = prefix.length() - 1i >= 0i--) 
    {
        // hold char from postFIx
        char c = prefix[i];
        // If letter then add into stack
        if (isalpha(c))
           {
               //convert character 
               //to string 
               string strc(1,c);
               stack.push(strc);
           } 
        else 
         {
                // rule = first+operator+second
                string a = stack.top();
                stack.pop();

                string b = stack.top();
                stack.pop();
                //convert from character
                //to string
                string strc(1,c);
                stack.push(a + "" + strc + "" + b);
            }

        }
        // iterate till stack is empty
        while (!stack.empty()) {
            {
                infix += stack.top();
                stack.pop();
            }
        }
        return infix;
}
int main()
{
   // prefix
    string prefix = "+A+*BC*/EF^GH";
   // prefix to infix
   string infix = prefixToInfix(prefix);
    cout<<"Infix is ";
    cout<<infix<<"\n";
    return 0;
}


No comments:

Post a Comment