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:-