如果有小白同学,不知道什么是后缀表达式,作者推荐:栈--后缀表达式求值_加瓦不加班的博客-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
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();
- }