二叉树--后缀表达式转二叉树

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值