算法练习----力扣每日一题------3

原题链接

331. 验证二叉树的前序序列化 - 力扣(LeetCode)

题目解析

        给一个字符串,判断它是否是一个二叉树的前序遍历.不同元素由逗号隔开,空节点用#字符代替.

递归解法

        先假设每个元素都由一个字符构成(这样可以先不考虑烦人的多个字符情况)

        在接口中调用一个递归函数

//    preorder 原数组
//    pos 下标
//    ret    返回值
//    tmp    用来简单记录一下递归开始的位置
void fun(string& preorder, int& pos, bool& ret, bool tmp = false)

对于preorder[pos]处的递归判断来说        

  1. pos下标不合法                ruturn
  2. preorder[pos] == '#'        空节点,不需要再往下执行,直接return
  3. preorder[pos] 是数字      调用两次fun检测左右子树
  4. preorder[pos] == ','         按照假设这种情况有办法避免,可以不出现,不考虑

运行结束后,在递归执行的入口处如果pos等于数组长度-1,证明成立,否则不成立.

void fun(string& preorder, int& pos, bool& ret, bool tmp = false)
{if (pos >= preorder.size()){ret = false;return;}if (preorder[pos] == '#')return;fun(preorder, pos += 2, ret);fun(preorder, pos += 2, ret);if (tmp == true && pos == preorder.size() - 1)ret = true;}

将多字符元素转化成单子符元素,这个比较简单就不多说了

全部代码

class Solution {
public:void fun(string& preorder, int& pos, bool& ret, bool tmp = false){if (pos >= preorder.size()){ret = false;return;}if (preorder[pos] == '#')return;fun(preorder, pos += 2, ret);fun(preorder, pos += 2, ret);if (tmp == true && pos == preorder.size() - 1)ret = true;}bool fun2(char x){return x >= '0' && x <= '9';}bool isValidSerialization(string preorder) {bool ret = false;int pos = 0;string tmp;if (preorder == "#")return true;char c1 = 0;for (auto e : preorder){if (fun2(e) && fun2(c1))continue;else {tmp.push_back(e);c1 = e;}}fun(tmp, pos, ret, true);return ret;}
};

感谢观看!!!!!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

zookeeper如何管理客户端与服务端之间的链接?(zookeeper sessions)

zookeeper客户端与服务端之间的链接用zookeeper session表示。 zookeeper session有三个状态&#xff1a; CONNECTING, ASSOCIATING, CONNECTED, CONNECTEDREADONLY, CLOSED, AUTH_FAILED, NOT_CONNECTED&#xff08;start时的状态&#xff09; 1、CONNECTING 。 表明客户…

【Linux2】Linux的权限

思维导图 学习内容 在介绍完一些基本指令后&#xff0c;我们需要进行对权限以后一个全新的认识&#xff0c;比如文件的权限、目录的权限等等…… 学习内容 通过上面的学习目标&#xff0c;我们可以列出要学习的内容&#xff1a; shell命令以及运行原理Linux权限的概念Linux权…

【Blockchain】GameFi | NFT

Blockchain GameFiGameFi顶级项目TheSandbox&#xff1a;Decentraland&#xff1a;Axie Infinity&#xff1a; NFTNFT是如何工作的同质化和非同质化区块链协议NFT铸币 GameFi GameFi是游戏和金融的组合&#xff0c;它涉及区块链游戏&#xff0c;对玩家提供经济激励&#xff0c…

失物招领(源码+文档)

失物招领&#xff08;小程序、ios、安卓都可部署&#xff09; 文件包含内容程序简要说明含有功能项目截图客户端首页注册界面发布动态我的详细登录修改资料发布动态 管理端后台登录用户管理分类管理内容管理 文件包含内容 1、搭建视频 2、流程图 3、开题报告 4、数据库 5、参考…

听说小程序可以转换APP?

直接上传送门&#xff1a; 多端框架概述 多端框架概述 多端框架概述 Donut 多端框架是支持使用小程序技术和工具开发移动应用的框架&#xff0c;开发者可以一次编码&#xff0c;分别编译为小程序和 Android 以及 iOS 应用&#xff0c;实现多端开发&#xff1b;能帮助企业有效降…

Delphi10.2调用diocp开发的HTTP服务器,网址带中文参数用了UTF8Decode还是乱码的问题解决

由于项目需要&#xff0c;最近用 Delphi.10.2精简版404M的开发工具 维护了一个 网关程序&#xff0c;这个网关程序采用的是 HTTP服务器。核心是调用了 diocp这个开源项目&#xff0c;听说是支持高并发。接受到的数据用UTF8Decode处理后还是中文还是乱码。。。。。 http://127.…

施耐德 PLC 控制系统 产品 + 软件总体介绍 2020

参考 2020.7 官方说明视频&#xff1a;https://www.bilibili.com/video/BV1Mi4y1G7Qc/ 总体说明 施耐德作为工业控制界巨头&#xff08;公认的几大巨头&#xff1a;西门子、AB、施耐德&#xff09;&#xff0c;PLC 控制器产品线很庞大&#xff0c;涵盖了高中低的完整产品线&…

webpack打包模块

webpack打包模块 一.webpack简介二.Webpack 修改入口和出口三.Webpack 自动生成 html 文件四.Webpack-打包 css 代码五.优化-提取 css 代码六.优化压缩过程七.Webpack-打包图片 一.webpack简介 1.Webpack 是一个静态模块打包工具&#xff0c;从入口构建依赖图&#xff0c;打包…

嵌入式C语言--GPT通用定时器

嵌入式C语言–GPT通用定时器 嵌入式C语言--GPT通用定时器 嵌入式C语言--GPT通用定时器一. GPT基本概念二. GPT的作用三. GPT通道的四个状态四. Continuous/One-Shot模式3.1&#xff09;Continuous模式3.2&#xff09;One-Shot模式 一. GPT基本概念 GPT即General Purpose Timer…

vue-列表渲染

在vue中 提供了 v-if v-else v-else-if v-show v-if v-if指令用于条件性渲染地渲染一块内容.这块内容只会在指令的表达式返回真值时会被渲染 实例: <template><h3>条件渲染</h3><div v-if"flag">看</div></template> <s…

吴恩达2022机器学习专项课程(一) 4.4 学习率

问题预览/关键词 学习率太小有什么影响&#xff1f;学习率太大有什么影响&#xff1f;如果成本函数达到局部最小值&#xff0c;使用梯度下降还能继续最小化吗&#xff1f;为什么学习率固定&#xff0c;而最小化成本函数的步幅却越来越缓&#xff1f;如何选择合适的学习率&…

算法学习——LeetCode力扣图论篇3(127. 单词接龙、463. 岛屿的周长、684. 冗余连接、685. 冗余连接 II)

算法学习——LeetCode力扣图论篇3 127. 单词接龙 127. 单词接龙 - 力扣&#xff08;LeetCode&#xff09; 描述 字典 wordList 中从单词 beginWord 和 endWord 的 转换序列 是一个按下述规格形成的序列 beginWord -> s1 -> s2 -> … -> sk&#xff1a; 每一对相…

【苹果MAC】苹果电脑 LOGI罗技鼠标设置左右切换全屏页面快捷键

首先键盘设置->键盘快捷键 调度中心 设置 f1 f2 为移动一个空间&#xff08;就可以快捷移动了&#xff09; 想要鼠标直接控制&#xff0c;就需要下载官方驱动&#xff0c;来设置按键快捷键&#xff0c;触发 F1 F2 安装 LOGI OPTIONS Logi Options 是一款功能强大且便于使用…

Spring Boot单元测试全指南:使用Mockito和AssertJ

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

Verilog语法回顾--用户定义原语

目录 用户定义原语 UDP定义 UDP状态表 状态表符号 组合UDP 电平敏感UDP 沿敏感时序UDP 参考《Verilog 编程艺术》魏家明著 用户定义原语 用户定义原语&#xff08;User-defined primitive&#xff0c;UDP&#xff09;是一种模拟硬件技术&#xff0c;可以通过设计新的原…

人工智能产业应用--具身智能

五、下一个浪潮 (一) 跳出缸中脑——虚实结合 在探索人工智能的边界时&#xff0c;“跳出缸中脑——虚实结合”这一概念提出了一个引人深思的视角&#xff0c;尤其是在具身智能的领域。具身智能是一种思想&#xff0c;强调智能体通过与其环境的直接物理互动来实现智能行为。然…

【JavaScript编程】ArrayBuffer转JSON

将ArrayBuffer转换为JSON是一个复杂的过程&#xff0c;因为它涉及到从二进制数据到文本数据的转换。 步骤如下&#xff1a; 将ArrayBuffer转换为字节数组&#xff1a;你可以使用Uint8Array或其他TypedArray视图来读取ArrayBuffer中的数据。 解码字节数组&#xff1a;使用Text…

QT-左框选项卡软件界面框架

QT-左框选项卡软件界面框架 一、演示效果二、关键程序三、下载链接 一、演示效果 二、关键程序 #include <QTextBrowser> #include <QLabel> #include <QPushButton> #include <QSpacerItem> #include <QToolButton> #include <QDebug> #i…

在 QML 中,ComboBox 是一种常用的用户界面控件,通常用于提供一个下拉式的选择框,允许用户从预定义的选项列表中选择一个值

ComboBox 详解&#xff1a; 以下是 ComboBox 的一些重要属性和特性&#xff1a; model: 用于指定 ComboBox 中的选项列表&#xff0c;可以是一个数组、列表、模型或者其他可迭代的数据结构。 editable: 用于指定是否允许用户编辑 ComboBox 中的文本输入框&#xff0c;以便输入…

【MyBatis】MyBatis的介绍和基本使用

目录 一、数据库操作框架的历程 1.1 JDBC 1.2 DBUtils 1.3 Hibernate 1.4 Spring JDBC&#xff1a;JDBCTemplate 1.5 Spring Data JPA 二、什么是MyBatis&#xff1f; 2.1 传统JDBC与MyBatis相比的弊病 2.2 MyBatis中的组件 2.3 MyBatis的体系结构 三、快速搭建MyBa…