Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Write a Java program, named ExpressionTree.java, which takes an input of an in?x

ID: 3677823 • Letter: W

Question

Write a Java program, named ExpressionTree.java, which takes an input of an in?x expression from

a user, constructs its binary expression tree, and performs the following operations on the binary

expression tree in a sequential order:

void preOrder(): an preorder traversal to print out a pre?x expression;

void inOrder(): an inorder traversal to print out an in?x expression, including parentheses if

necessary;

void postOrder(): an postorder traversal to print out an post?x expression;

int evaluate(): evaluate the binary expression tree.

Your in?x airthmatic expression should support the following binary operators: +, -, *, / (integer

division), parenthesis (), and non-negative integers. Sample runs of your program should be similar

to:

$ Java ExpressionTree

Please give an in?x expression: 54 ? (6 + 10) ? 24/(2 + 4)

pre?x expression: - * 54 + 6 10 / 24 + 2 4

in?x expression: 54*(6+10)-24/(2+4)

post?x expression: 54 6 10 + * 24 2 4 + / -

evaluation result: 860

Explanation / Answer

/********************ExpressionTreeTest.java *****************/

/**

* Java Program to Implement Expression Tree Algorithm

*/

import java.util.Scanner;

/** Class ExpressionTree **/

class ExpressionTree

{

/** class TreeNode **/

class TreeNode

{

char data;

TreeNode left, right;

/** constructor **/

public TreeNode(char data)

{

this.data = data;

this.left = null;

this.right = null;

}

}

/** class StackNode **/

class StackNode

{

TreeNode treeNode;

StackNode next;

/** constructor **/

public StackNode(TreeNode treeNode)

{

this.treeNode = treeNode;

next = null;

}

}

private static StackNode top;

/** constructor **/

public ExpressionTree()

{

top = null;

}

/** function to clear tree **/

public void clear()

{

top = null;

}

/** function to push a node **/

private void push(TreeNode ptr)

{

if (top == null)

top = new StackNode(ptr);

else

{

StackNode nptr = new StackNode(ptr);

nptr.next = top;

top = nptr;

}

}

/** function to pop a node **/

private TreeNode pop()

{

if (top == null)

throw new RuntimeException("Underflow");

else

{

TreeNode ptr = top.treeNode;

top = top.next;

return ptr;

}

}

/** function to get top node **/

private TreeNode peek()

{

return top.treeNode;

}

/** function to insert character **/

private void insert(char val)

{

try

{

if (isDigit(val))

{

TreeNode nptr = new TreeNode(val);

push(nptr);

}

else if (isOperator(val))

{

TreeNode nptr = new TreeNode(val);

nptr.left = pop();

nptr.right = pop();

push(nptr);

}

}

catch (Exception e)

{

System.out.println("Invalid Expression");

}

}

/** function to check if digit **/

private boolean isDigit(char ch)

{

return ch >= '0' && ch <= '9';

}

/** function to check if operator **/

private boolean isOperator(char ch)

{

return ch == '+' || ch == '-' || ch == '*' || ch == '/';

}

/** function to convert character to digit **/

private int toDigit(char ch)

{

return ch - '0';

}

/** function to build tree from input */

public void buildTree(String eqn)

{

for (int i = eqn.length() - 1; i >= 0; i--)

insert(eqn.charAt(i));

}

/** function to evaluate tree */

public double evaluate()

{

return evaluate(peek());

}

/** function to evaluate tree */

public double evaluate(TreeNode ptr)

{

if (ptr.left == null && ptr.right == null)

return toDigit(ptr.data);

else

{

double result = 0.0;

double left = evaluate(ptr.left);

double right = evaluate(ptr.right);

char operator = ptr.data;

switch (operator)

{

case '+' : result = left + right; break;

case '-' : result = left - right; break;

case '*' : result = left * right; break;

case '/' : result = left / right; break;

default : result = left + right; break;

}

return result;

}

}

/** function to get postfix expression */

public void postfix()

{

postOrder(peek());

}

/** post order traversal */

private void postOrder(TreeNode ptr)

{

if (ptr != null)

{

postOrder(ptr.left);

postOrder(ptr.right);

System.out.print(ptr.data);

}

}

/** function to get infix expression */

public void infix()

{

inOrder(peek());

}

/** in order traversal */

private void inOrder(TreeNode ptr)

{

if (ptr != null)

{

inOrder(ptr.left);

System.out.print(ptr.data);

inOrder(ptr.right);

}

}

/** function to get prefix expression */

public void prefix()

{

preOrder(peek());

}

/** pre order traversal */

private void preOrder(TreeNode ptr)

{

if (ptr != null)

{

System.out.print(ptr.data);

preOrder(ptr.left);

preOrder(ptr.right);

}

}

}

/** class ExpressionTreeTest **/

public class ExpressionTreeTest

{

public static void main(String[] args)

{

Scanner scan = new Scanner(System.in);

System.out.println("Expression Tree Test");

/** make object of ExpressionTree **/

ExpressionTree et = new ExpressionTree();

System.out.println(" Enter equation in prefix form");

et.buildTree(scan.next());

System.out.print(" Prefix : ");

et.prefix();

System.out.print(" Infix : ");

et.infix();

System.out.print(" Postfix : ");

et.postfix();

System.out.println(" Evaluated Result : "+ et.evaluate());

}

}

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote