331. Verify Preorder Serialization of a Binary Tree | Java最短代码实现

本文讨论了如何通过字符串操作和理解树的基本概念来验证二叉树的前序序列化是否正确。通过在字符串前添加一个逗号并遵循特定规则,可以判断序列化是否完整。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原题链接:331. Verify Preorder Serialization of a Binary Tree

【思路】

本题考查字符串的操作和树的基本概念。注意题目要求构造一个完整的树,所有叶子节点都要以#结束,也就是"9,#,#"满足要求,二"9,#"和”9"不满足。本题中在字符串前面加了一个逗号,目的是在每次遇到逗号之后,判断下一个字符为空或数字(有可能不止一位,如"9,#,98,#,#"):

    public boolean isValidSerialization(String preorder) {
        int curCount = 0;
        int curShouldCount = 1;
        int nextShouldCount = 0;
        int i = 0;
        preorder = "," + preorder;
        for (; i <  preorder.length(); i++) {
            if (preorder.charAt(i) == ',') {
                if (preorder.charAt(i + 1) != '#')
                    nextShouldCount += 2;
                if (++curCount == curShouldCount) {
                    if (nextShouldCount == 0) break;
                    curShouldCount = nextShouldCount;
                    nextShouldCount = 0;
                    curCount = 0;
                }
            }
        }
        return i + 2 == preorder.length() && curCount == curShouldCount;
    }
150 / 150  test cases passed. Runtime: 5 ms  Your runtime beats 98.04% of javasubmissions.
欢迎优化!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值