[Solved]Java Program Implements Expression Tree Algorithm Prefix Expression Need Implemented Level Q37130216
This Java Program Implements Expression Tree Algorithm fromPrefix expression, but I need it to be implemented from Level OrderTree Traversal in JAVA. Here is an example:
Example of the input binary tree (could be froma file ):
+ – – 3 * – + _ _ 2 5 5 2 3 15
The output of your program of the above parsedmath expression should be:
Pre-Order: + – 3 * 2 5 – – 5 2 + 3 15
Pre-Order Evaluation: -22
Post-Order: 3 2 5 * – 5 2 – 3 15 + – +
Post-Order Evaluation: -22
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(“nEnter equation in prefix form”);
et.buildTree(scan.next());
System.out.print(“nPre-Order : “);
et.prefix();
System.out.println(“nnPre-OrderEvaluated Result : “+ et.evaluate());
System.out.print(“nnInOrder : “);
et.infix();
System.out.print(“nnPost-Order : “);
et.postfix();
System.out.println(“nnPost-Order Evaluated Result : “+et.evaluate());
}
}
Expert Answer
Answer to This Java Program Implements Expression Tree Algorithm from Prefix expression, but I need it to be implemented from Leve… . . .
OR

