Назначение предназначено, чтобы помочь понять и практиковать концепции деревьев и обход. Я должен использовать дерево для оценки выражения в префиксной (полированной) нотации, а также для печати выражения в постфиксной (обратной польский) нотации и инфиксной нотации.Как мне теперь «построить» дерево с помощью сканера? (объяснение после кода)
Вот класс оценки, который был предоставлен.
import java.util.*;
public class Evaluation
{
public static void main(String[] args)
{
System.out.print("Enter a prefix expression: ");
Scanner scanner = new Scanner(System.in);
// build an expression tree
Node root = buildTree(scanner);
// print prefix expression
System.out.println("prefix expression:");
preorder(root);
System.out.println();
// print postfix expression
System.out.println("postfix expression:");
postorder(root);
System.out.println();
// print infix expression
System.out.println("infix expression:");
inorder(root);
System.out.println();
// evaluate the expression using postfix
System.out.println("Result = " + evaluate(root));
}
// build an expression tree and return the root node of the tree
public static Node buildTree(Scanner sc)
{
// your code here
}
// Postfix expression is the result of a post-order traversal
public static void postorder(Node node)
{
// your code here
}
// Prefix expression is the result of a pre-order traversal
public static void preorder(Node node)
{
// your code here
}
// Infix expression is the result of a in-order traversal
public static void inorder(Node node)
{
// your code here
}
// Evaluate the expression tree using postorder traversal
public static int evaluate(Node node)
{
// your code here
}
}
EDIT: Вот класс Node, который мне пришлось написать.
public class Node {
String value;
Node left, right;
Node(String value){
this.value = value;
}
Node(String value, Node left, Node right){
this.left = left;
this.right = right;
}
public boolean isLeaf(){
if()
return true;
}
}
Инструкции по заданию должны были использовать данный метод buildTree построить дерево и оценить 4 заданные выражения в префиксной нотации:
1.- + 10 * 2 8 3
2 ./ * + 3 14 2 7
3. + + 4 2 * 3 - 15 1
4./-% + 1 2 3 6 + 2 3
EDIT: в предыдущем задании мне приходилось оценивать выражения Postfix с использованием стека, но как бы я мог построить и пройти через это дерево для оценки префиксных выражений? (Я предполагаю, что операнды и операторы будут значением узлов, а затем узлы каким-то образом свяжутся.)