如果有小白同学,不知道什么是后缀表达式,作者推荐:栈--后缀表达式求值_加瓦不加班的博客-CSDN博客
文章前言:如果有小白同学还是对于二叉树不太清楚,作者推荐:二叉树的初步认识_加瓦不加班的博客-CSDN博客
首先我们创建一个TreeNode:
static class TreeNode {
public String val;
public TreeNode left;
public TreeNode right;
public TreeNode(String val) {
this.val = val;
}
public TreeNode(TreeNode left, String val, TreeNode right) {
this.left = left;
this.val = val;
this.right = right;
}
@Override
public String toString() {
return this.val;
}
}
代码实现:
public TreeNode constructExpressionTree(String[] tokens) {
LinkedList<TreeNode> stack = new LinkedList<>();
for (String t : tokens) {
//switch版本:第一版
switch (t) {
case "+", "-", "*", "/" -> { // 运算符
//遇到运算符, 出栈两次
TreeNode right = stack.pop();
TreeNode left = stack.pop();
//然后将运算符放入栈中
TreeNode parent = new TreeNode(t);
//先出战的放入right中,后出战的放入left中
parent.left = left;
parent.right = right;
stack.push(parent);
}
default -> { // 数字
//1.遇到数字入栈
stack.push(new TreeNode(t));
}
}
//switch版本:第二版
// switch (t) {
// case "+":// 运算符
// case "-":
// case "*":
// case "/":
// //遇到运算符, 出栈两次
// TreeNode right = stack.pop();
// TreeNode left = stack.pop();
// //然后将运算符放入栈中
// TreeNode parent = new TreeNode(t);
// //先出战的放入right中,后出战的放入left中
// parent.left = left;
// parent.right = right;
// stack.push(parent);
// break;
// default :// 数字
// //1.遇到数字入栈
// stack.push(new TreeNode(t));
// break;
// }
}
return stack.peek();
}