5+3*4的表达式树Java代码
时间: 2024-02-12 19:05:36 浏览: 202
下面是一个简单的 Java 代码,用于构建和求解表达式树,其中表达式为 5+3*4:
```java
class TreeNode {
String val;
TreeNode left;
TreeNode right;
TreeNode(String val) {
this.val = val;
}
}
public class ExpressionTree {
public static void main(String[] args) {
String[] postfix = {"5", "3", "4", "*", "+"};
TreeNode root = buildExpressionTree(postfix);
int result = evaluateExpressionTree(root);
System.out.println(result); // 输出 17
}
public static TreeNode buildExpressionTree(String[] postfix) {
Stack<TreeNode> stack = new Stack<>();
for (String s : postfix) {
TreeNode node = new TreeNode(s);
if (isOperator(s)) {
node.right = stack.pop();
node.left = stack.pop();
}
stack.push(node);
}
return stack.pop();
}
public static int evaluateExpressionTree(TreeNode root) {
if (root == null) {
return 0;
}
if (root.left == null && root.right == null) {
return Integer.parseInt(root.val);
}
int left = evaluateExpressionTree(root.left);
int right = evaluateExpressionTree(root.right);
switch (root.val) {
case "+":
return left + right;
case "-":
return left - right;
case "*":
return left * right;
case "/":
return left / right;
default:
throw new IllegalArgumentException("Invalid operator: " + root.val);
}
}
private static boolean isOperator(String s) {
return s.equals("+") || s.equals("-") || s.equals("*") || s.equals("/");
}
}
```
这段代码中,我们构建了一个 `TreeNode` 类,用于表示表达式树的节点。然后,我们使用后缀表达式 `"5", "3", "4", "*", "+"` 构建了一个表达式树,并且计算出了表达式的结果。具体来说,我们使用栈来构建表达式树,遇到操作符时弹出栈顶的两个节点作为其左右子节点,然后将新的节点入栈。最后,栈中剩下的唯一节点就是表达式树的根节点。最后,我们使用递归来计算表达式树的值,如果当前节点是叶子节点,则返回其对应的数字值,否则根据操作符计算左右子树的值并返回最终结果。
阅读全文