In: Computer Science
Hi there, I am making a program using trees, and recursion to compute prefix, infix, and postfix expressions. I am struggling with placing parentheses to separate the infix numbers, and with how I should write my evaluation. (In java) if someone could please help me out. I included my evaluation class, and my current output.
public class Evaluation {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter a prefix expression:");
        Node root = buildTree(sc);
        System.out.println("Infix expression:");
        infix(root);
        System.out.println("\nprefix expression:");
        prefix(root);
        System.out.println("\npostfix expression:");
        postfix(root);
        evaluate(root);
    }
    static Node buildTree(Scanner sc) {
        String input = sc.next();
        if (!input.contains("+") && !input.contains("-") && !input.contains("*") && !input.contains("/")) {
            return new Node(input);
        } else {
            Node right = buildTree(sc);
            Node left = buildTree(sc);
            return new Node(input, left, right);
        }
    }
    static void infix(Node node) {
        if (node != null) {
            infix(node.right);
            System.out.print(node.value + " ");
            infix(node.left);
        }
    }
    static void prefix(Node node) {
        if (node != null) {
            System.out.print(node.value + " ");
            prefix(node.right);
            prefix(node.left);
        }
    }
    static void postfix(Node node) {
        if (node != null) {
            postfix(node.right);
            postfix(node.left);
            System.out.print(node.value + " ");
        }
        static int evaluate (Node node){
                }
            }
        }
    }
Enter a prefix expression:
- + 10 * 2 8 3
Infix expression:
10 + 2 * 8 - 3 ------> should be ( ( 10 + ( 2 * 8 ) ) - 3
)
prefix expression:
- + 10 * 2 8 3
postfix expression:
10 2 8 * + 3 -
Process finished with exit code 0
// java
public class Evaluation {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter a prefix expression:");
        Node root = buildTree(sc);
        System.out.println("Infix expression:");
        infix(root);
        System.out.println("\nprefix expression:");
        prefix(root);
        System.out.println("\npostfix expression:");
        postfix(root);
       int result= evaluate(root);
       System.out.println("\nThe value of the above expression is: "+result);
    }
    static Node buildTree(Scanner sc) {
        String input = sc.next();
        if (!input.contains("+") && !input.contains("-") && !input.contains("*") && !input.contains("/")) {
            return new Node(input);
        } else {
            Node right = buildTree(sc);
            Node left = buildTree(sc);
            return new Node(input, left, right);
        }
    }
    static void infix(Node node) {
        if(node!=null&&node.left==null&&node.right==null) // if the node is leaf
            {
                System.out.print(node.value);
                return ;
            }
        if (node != null) {
            System.out.print("(");
            infix(node.right);
            System.out.print(node.value + " ");
            infix(node.left);
             System.out.print(")");
        }
    }
    static void prefix(Node node) {
        if (node != null) {
            System.out.print(node.value + " ");
            prefix(node.right);
            prefix(node.left);
        }
    }
    static void postfix(Node node) {
        if (node != null) {
            postfix(node.right);
            postfix(node.left);
            System.out.print(node.value + " ");
        }
}
        static int evaluate (Node node){
            if(node==null)
            return 0;
            if(node.left==null&&node.right==null)  // if node is leaf then return the integer value of that string 
            {
                return Integer.parseInt(node.value);
            }
            int right=evaluate(node.right);
            int left=evaluate(node.left);
            int result=0;
            if(node.value.equals("+"))
            {
                result= left+right;
            }
            else if(node.value.equals("-"))
            {
                result= right-left;
            }
            else if(node.value.equals("*"))
            {
                result= left*right;
            }
            else if(node.value.equals("/"))
            {
                result= right/left;
            }
           
return result;
                }
                
    
}
        
Sample output:-
