每日一题:331. 验证二叉树的前序序列化

解题思路

我们可以定义一个概念,叫做槽位。一个槽位可以被看作「当前二叉树中正在等待被节点填充」的那些位置。
在这里插入图片描述
在这里插入图片描述

我们使用栈来维护槽位的变化。栈中的每个元素,代表了对应节点处剩余槽位的数量,而栈顶元素就对应着下一步可用的槽位数量。当遇到空节点时,仅将栈顶元素减 1;当遇到非空节点时,将栈顶元素减 11 后,再向栈中压入一个 2。无论何时,如果栈顶元素变为 0,就立刻将栈顶弹出。

代码

class Solution {
    public boolean isValidSerialization(String preorder) {
        int n = preorder.length(),right = 0;
        char[] chars = preorder.toCharArray();
        if (n==0) return false;
        LinkedList<Integer> stack = new LinkedList<>();
        stack.add(1);
        while (right<n){
            System.out.println(chars[right]);
            if (stack.isEmpty()) return false;
            if (Character.isDigit(chars[right])) {
                int num = stack.getLast();
                stack.removeLast();
                num--;
                if (num!=0){
                    stack.add(num);
                }
                stack.add(2);
                right=right+2;
            }
            else if (chars[right]==',') right++;
            else if (chars[right]=='#'){
                int num = stack.getLast();
                stack.removeLast();
                num--;
                if (num!=0){
                    stack.add(num);
                }
                right++;
            }
            System.out.println(stack);
        }
       // System.out.println(stack);
        return stack.isEmpty();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值