Leetcode--Java--331. 验证二叉树的前序序列化

题目描述

在这里插入图片描述

样例描述

在这里插入图片描述

思路

**递归前序遍历 + 模拟 **
核心思路:根据题意进行前序遍历模拟,看模拟过程中是否还有什么问题。
在这里插入图片描述

  1. 直接dfs递归前序遍历,按照根左右的顺序。
  2. 以“,”作为分隔符进行遍历,首先加上一个“,”,方便处理最后一个。如果dfs中指针k已经越界了,说明没有字符串了,递归中没东西,就是false。否则如果到达空表示这边子树已经走到了空结点,返回true然后切换到另外一边。
  3. 最后如果左右子树同时为true才说明能形成树。最后判断k是否恰好在末尾即可(也就是看有没有多余的元素在末尾)。
  4. 不用真正地去构造树,只是模拟遍历过程假装形成树。

代码

class Solution {
    String s;
    int k;
    public boolean isValidSerialization(String _s) {
       //以,作为结束分割,先拼接一个,方便处理末尾的字符
       s = _s + ',';
       k = 0;
       //如果递归dfs中出现问题
       if (!dfs()) return false;
       //看是否恰好指向末尾,也就是是否还有多余的元素
       return k == s.length();
    }
    public boolean dfs() {
        //已经没有字符串了
        if (k == s.length()) return false;
        //如果遇到#,就跳过#以及后面的","
        if (s.charAt(k) == '#') {
            k += 2;
            //表示当前分支已经到叶子结点,没问题,可以切换到另外一边
            return true;
        }
        //只要不等于","
        while (s.charAt(k) != ',') {
            k ++;
        }
        //再跳过","
        k ++;
        //上面是对根的处理,下面如果左右子树都没问题,就返回true
        return dfs() && dfs();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值