|
| 1 | +//Java Program to convert Infix Expression to Prefix |
| 2 | +import java.util.Stack; |
| 3 | + |
| 4 | +public class InfixToPrefix { |
| 5 | + public static void main(String[] args) { |
| 6 | + System.out.println("1+2+3 -> " + infix2Prefix("1+2+3")); |
| 7 | + System.out.println("A^B-(C+D) -> " + infix2Prefix("A^B-(C+D)")); |
| 8 | + System.out.println("(P/L+(F*J) -> " + infix2Prefix("(P/L+(F*J)")); |
| 9 | + } |
| 10 | + public static String infix2Prefix(String expression){ |
| 11 | + if(!BalancedBrackets.isBalanced(expression)) return "Invalid Expression"; |
| 12 | + Stack<Character> operatorStack = new Stack<>(); |
| 13 | + StringBuilder prefixExpression = new StringBuilder(); |
| 14 | + int n = expression.length(); |
| 15 | + for(int i = n - 1 ; i >= 0 ; i--){ |
| 16 | + char scanned = expression.charAt(i); |
| 17 | + if(Character.isLetterOrDigit(scanned)) prefixExpression.append(scanned); |
| 18 | + else if(scanned == ')') operatorStack.push(scanned); |
| 19 | + else if(scanned == '('){ |
| 20 | + while(!operatorStack.isEmpty() && operatorStack.peek() != ')'){ |
| 21 | + prefixExpression.append(operatorStack.pop()); |
| 22 | + } |
| 23 | + if(!operatorStack.isEmpty()) operatorStack.pop(); |
| 24 | + } |
| 25 | + else if(operatorStack.isEmpty() || operatorStack.peek() == ')') operatorStack.push(scanned); |
| 26 | + else{ |
| 27 | + while(!operatorStack.isEmpty() && precedence(operatorStack.peek()) < precedence(scanned)){ |
| 28 | + prefixExpression.append(operatorStack.pop()); |
| 29 | + } |
| 30 | + operatorStack.push(scanned); |
| 31 | + } |
| 32 | + } |
| 33 | + while(!operatorStack.isEmpty()) prefixExpression.append(operatorStack.pop()); |
| 34 | + return prefixExpression.reverse().toString(); |
| 35 | + } |
| 36 | + static int precedence(char operator){ |
| 37 | + if(operator == '^') return 3; |
| 38 | + if(operator == '*' || operator == '/') return 2; |
| 39 | + if(operator == '+' || operator == '-') return 1; |
| 40 | + return 0; |
| 41 | + } |
| 42 | +} |
0 commit comments