思维题,LeetCode331. 验证二叉树的前序序列化

一、题目

1、题目描述

序列化二叉树的一种方法是使用 前序遍历 。当我们遇到一个非空节点时,我们可以记录下这个节点的值。如果它是一个空节点,我们可以使用一个标记值记录,例如 #

例如,上面的二叉树可以被序列化为字符串 "9,3,4,#,#,1,#,#,2,#,6,#,#",其中 # 代表一个空节点。

给定一串以逗号分隔的序列,验证它是否是正确的二叉树的前序序列化。编写一个在不重构树的条件下的可行算法。

保证 每个以逗号分隔的字符或为一个整数或为一个表示 null 指针的 '#' 。

你可以认为输入格式总是有效的

  • 例如它永远不会包含两个连续的逗号,比如 "1,,3" 。

注意:不允许重建树。

2、接口描述

class Solution {
public:
    bool isValidSerialization(string preorder) {

    }
};

3、原题链接

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


二、解题报告

1、思路分析

一个非空节点可以产生两个位置,空节点和非空节点都会消耗一个位置

遍历序列,维护当前可用位置,如果可用位置为0,那么返回false

结束后,如果可用位置为0,那么返回true

2、复杂度

时间复杂度: O(n)空间复杂度:O(1)

3、代码详解

​cpp
class Solution {
public:
    bool isValidSerialization(string preorder) {
        int s = 1;
        for(int i = 0, n = preorder.size(); i < n; ){
            if(s == 0) return false;
            if(preorder[i] == ',') i++;
            else if(preorder[i] == '#') s--, i++;
            else {
                while(i < n && preorder[i] != ',') i++;
                s++;
            }
        }
        return s == 0;
    }
};
python3
class Solution:
    def isValidSerialization(self, preorder: str) -> bool:
        n, i, s = len(preorder), 0, 1
        while i < n:
            if not s:
                return False
            elif preorder[i] == ',':
                i += 1
            elif preorder[i] == '#':
                s -= 1
                i += 1
            else:
                while i < n and preorder[i] != ',':
                    i += 1
                s += 1
        return s == 0
        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/503951.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024.3.31每日一题

LeetCode 验证二叉树的前序序列化 题目链接&#xff1a;331. 验证二叉树的前序序列化 - 力扣&#xff08;LeetCode&#xff09; 题目描述 序列化二叉树的一种方法是使用 前序遍历 。当我们遇到一个非空节点时&#xff0c;我们可以记录下这个节点的值。如果它是一个空节点&a…

夜莺浏览日志、filebeat采集日志(四)

文章目录 一、elasticsearch二、filebeat三、日志分析 一、elasticsearch docker启动 docker run -d -p 9200:9200 -p 9300:9300 --restartalways -e ES_JAVA_OPTS"-Xms512m -Xmx512m" \ -e discovery.typesingle-node -e xpack.security.enabledtrue -e ELASTIC_P…

数据结构初阶:排序

排序的概念及其运用 排序的概念 排序 &#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。 稳定性 &#xff1a;假定在待排序的记录序列中&#xff0c;存在多个具有相同的关键字的记录&…

基于springboot+vue实现的养老服务管理系统

作者主页&#xff1a;Java码库 主营内容&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取源码 技术选型 【后端】&#xff1a;Java 【框架】&#xff1a;spring…

mysql 条件/系统/加密/其它函数

学习了日期时间函数&#xff0c;接着学习条件、系统、加密和其它函数。 3&#xff0c;条件判断函数 条件判断函数也称为控制流程函数&#xff0c;根据满足的条件的不同&#xff0c;执行相应的流程。MySQL中进行条件判断的函数有IF、IFNULL和 CASE。 函数 说明 IF(expr,v1,v2…

【文献分享】 机器学习 + 分子动力学 + 第一性原理计算 + 热力学性质(熔化温度 热导率 热膨胀系数)

分享一篇关于机器学习 分子动力学 第一性原理 熔化温度&#xff08;熔化温度 & 热导率 & 热膨胀系数&#xff09;的文章。 感谢论文的原作者&#xff01; 关键词&#xff1a; 1. Al−Li alloy 2. Neural network potential 3. Molecular dynamics 4. Thermal pr…

Jenkins执行策略(图文讲解)

Jenkins执行策略-图文讲解 一&#xff1a;手动执行1、手动执行流程2、手动执行操作 二、通过构建触发器——定时执行1、定时执行流程2、定时执行操作 三、当开发部署成功之后进行执行——在测试项配置——关注的项目1、执行流程2、操作流程 四、测试代码有更新的时候自动构建1、…

Collection与数据结构 链表与LinkedList (一):链表概述与单向无头非循环链表实现

1.ArrayList的缺点 上篇文章我们已经对顺序表进行了实现,并且对ArrayList进行了使用,我们知道ArrayList底层是使用数组实现的. 由于其底层是一段连续空间&#xff0c;当在ArrayList任意位置插入或者删除元素时&#xff0c;就需要将后序元素整体往前或者往后搬移&#xff0c;时…

面试八股——数据库——慢查询

什么是慢查询 查询速度很慢的查询。 慢查询定位策略 在MYsql开启慢查询日志并配置慢查询的查询时间阈值。以后所有超过该阈值的慢查询都会被记录&#xff1a; 面试总结 慢查询一般会发生在多表查询、聚合查询和表数据量较大的查询操作中。 可通过Mysql自带的慢日志定位慢查询…

基于Pytorch的验证码识别模型应用

前言 在做OCR文字识别的时候&#xff0c;或多或少会接触一些验证码图片&#xff0c;这里收集了一些验证码图片&#xff0c;可以对验证码进行识别&#xff0c;可以识别4到6位&#xff0c;纯数字型、数字字母型和纯字母型的一些验证码&#xff0c;准确率还是相当高&#xff0c;需…

基于单片机的自动浇灌系统的设计

本文设计了一款由单片机控制的自动浇灌系统。本设计的硬件电路采用AT89C51单片机作为主控芯片,采用YL-69土壤湿度传感器检测植物的湿度。通过单片机将采集湿度值与设定值分析处理后,控制报警电路和水泵浇灌电路的开启,从而实现植物的自动浇灌。 1 设计目的 随着生活水平的…

【C++】C到C++的入门知识

目录 1、C关键字 2、命名空间 2.1 命名空间的定义 2.2 命名空间的使用 2.2.1 加命名空间名称及作用域限定符 2.2.2 使用using将命名空间中某个成员引入 2.2.3 使用using namespace 命名空间名称引入 3、C输入&输出 4、缺省参数 4.1 缺省参数的概念 4.2 缺省参数的…

深入理解计算机系统 家庭作业2.59

#include <stdio.h> int main(void) { int x 0x89ABCDEF; int y 0x76543210; int z (x&0xFF)|((y>>8)<<8); printf("z%x\n",z); } //x的最低有效字节形成一个掩码(x&0xFF) //书右上角页码29页,寻址和字节顺序中提到…

Dynamic Declaration Language (DDL) 百练平台

题目链接: OpenJudge - 1684:Dynamic Declaration Language (DDL) 题目描述: 评价: 一道单纯的大模拟题&#xff0c;算法难度不大&#xff0c;需要非常细心&#xff0c;锻炼我们的耐心和能力&#xff01;值得一做 分析: 总结一下题目的条件&#xff0c;这种语言&#xff0…

YOLOv9改进策略 :主干篇 | 南开大学提出LSKNet,遥感旋转目标检测新SOTA ,ICCV 2023

💡💡💡本文改进内容: 动态调整特征提取骨干的感受野,以便更有效地处理被检测大小物体的不同的检测能力,也就是说可以有效提升检测数据集当中存在大小目标的检测能力 改进结构图如下: 《YOLOv9魔术师专栏》将从以下各个方向进行创新: 【原创自研模块】【多组合点优…

基于随机森林的信用卡满意度模型预测

基于随机森林的信用卡满意度模型预测 本文介绍了如何利用机器学习技术构建信用评分模型&#xff0c;以帮助金融机构评估借款人的信用风险并做出贷款决策。文章首先从数据预处理开始&#xff0c;包括数据读取、清洗和特征工程&#xff0c;以确保数据质量和适用性。接着&#xf…

实施阶段(2024年3月)

【项目活动1】需求分析 学生&#xff1a;在系统中可以账号登陆&#xff0c;查看今日菜谱&#xff0c;点餐反馈。 食堂管理人员&#xff1a;对原始数据整合&#xff0c;显示菜品结果统计&#xff0c;并根据统计结果对菜品供应量进行调整反馈&#xff0c;避免浪费。 【项目活动…

微信公众号互阅平台有哪些?阅读量互刷互粉工具软件

微信公众号的互助平台有哪些&#xff1f;微信公众号互阅平台与阅读量互刷互粉工具软件的相关介绍 微信公众号近期已成为信息传播的重要渠道&#xff0c;对于企业和个人而言具有重大意义。为了提升公众号的表现力和文章的影响力&#xff0c;互阅平台以及阅读量互刷互粉工具软件…

vue echarts 记录一个带tab切换的echarts页面 切换的时候如果有一个tab里的echarts没有数据 该如何清空echarts图的数据的问题

<template><div class"app-container"><el-form :model"queryParams" ref"queryForm" size"small" v-show"showSearch" label-width"85px"><el-form-item label"园所名称" prop&q…

技巧 Win10电脑打开SMB协议共享文件,手机端查看

一. 打开 SMB1.0/CIFS文件共享支持 ⏹如下图所示&#xff0c;打开SMB1.0/CIFS文件共享支持 二. 开启网络发现 ⏹开启网络发现&#xff0c;确保共享的文件能在局域网内被发现 三. 共享文件夹到局域网 ⏹根据需要勾选需要共享的文件夹&#xff0c;共享到局域网 四. 共享文件查…