当前位置: 首页 > news >正文

leecode 331 |验证二叉树的前序序列化 | gdb 调试找bug

计算的本质是数据的计算
数据的计算需要采用格式化的存储,
规则的数据结果,可以快速的按照指定要求存储数据

这里就不得不说二叉树了,二叉树应用场景真的很多

本题讲的是,验证二叉树的前序序列化

换言之,不采用建立树的结构体去判断给定的数据能否构建前序二叉树

比如前序二叉树的数据为: “9, 3, 4, #, #, 1, #, #, 2, #, 6, #, #”
在这里插入图片描述
就这样,给一字符串,包含整数、‘,’, '#'这三种数据类型
然后这个给定的字符串是二叉树的前序序列,现在需要你判定它是不是真的前序序列化(真的前序序列化是可以构建先序二叉树的)
注意哈 # 表示 空节点

//思路,用栈记录槽
//槽 是节点可存储节点的数量。
//栈顶记录 存储 当前节点
// 如果当前节点为空 槽要 -1 (也就是 栈顶 -1 )(如果栈顶减为 0,退栈)
//注意:在遍历的过程中,栈顶槽的大小是这样确定的,如果遍历到的节点为空节点,stk.top() -=1; 如果遍历到的节点非空,那么stk.top() -= 1; stk.push(2); //完成当前节点 槽 的更新,再在栈push 两个槽
//如果栈为空,但是还没有遍历结束 那证明这个序列构建不了先序二叉树

#include <stack>
#include <string>
#include <iostream>bool solution(std::string &str){std::stack<int> stk;int n = str.size();int i = 0;//最开始,如栈根节点stk.push(1);while(i < n){// 栈为空 直接 return falseif(stk.empty()){return false;			//line 18}// 如果是 ‘,’ i++if(str[i] == ','){i++;					// line 24}else if(str[i] == '#'){//	如果是空节点 当前槽 -1stk.top() -= 1;				// line 28if(!stk.top()){stk.pop();}// 别忘了 还要 i++	待会会讲我怎么gdb 调试找到这个bug 的(我测试的时候,忘了这块,然后调试定位到这个问题了)i++;}else{// 这里的都是非零节点的处理while(i < n && str[i] != ',' && str[i] != '#'){i++;}stk.top() -= 1;			// line 36if(!stk.top()){stk.pop();}stk.push(2);}}return stk.emptu();
}
int main(){std::string str = "9,3,4,#,#,1,#,#,2,#,6,#,#";if(solution(str)){std::cout<<" this is true"<<std::endl;}else{std::cout<<" this is false"<<std::endl;}return 0;
}

说明一下 上面的注释 //line xxx 是为了写这篇博客方便 定位这行的位置,注意区分
再说一说调试,因为我运行,输入正确的前序序列返回的也是错误的,后面后就gdb 调试
g++ test_331.cpp -g
gdb a.out
b 18
b 24
b 28
b 36

打了四个断点
r
然后单点调试
c
发现一直在 分支 ‘#’ 这块走,
我们定义的是,如果节点为空,槽 - 1
但是这里会一直跑,因为,当栈顶为空,会退栈,把栈下面的第一个元素移成栈顶,接着循环(如果栈 无穷,那在这里死循环 ,因为 i 这个计数器一直没有更新
可以打印 i
p i

好了 ,大概就是这样了。
EOF

相关文章:

leecode 331 |验证二叉树的前序序列化 | gdb 调试找bug

计算的本质是数据的计算 数据的计算需要采用格式化的存储&#xff0c; 规则的数据结果&#xff0c;可以快速的按照指定要求存储数据 这里就不得不说二叉树了&#xff0c;二叉树应用场景真的很多 本题讲的是&#xff0c;验证二叉树的前序序列化 换言之&#xff0c;不采用建立树的…...

服务器安全事件应急响应排查方法

针对服务器操作系统的安全事件也非常多的。攻击方式主要是弱口令攻击、远程溢出攻击及其他应用漏洞攻击等。分析安全事件&#xff0c;找到入侵源&#xff0c;修复漏洞&#xff0c;总结经验&#xff0c;避免再次出现安全事件&#xff0c;以下是参考网络上文章&#xff0c;总结的…...

数码视讯Q7盒子刷armbian或emuelec的一些坑

首先&#xff0c;我手头的盒子是nand存储的&#xff0c;如果是emmc的&#xff0c;会省事很多…… 以下很多结论是我的推测&#xff0c;不一定准确。 1&#xff0c;原装安卓系统不支持SD卡或U盘启动&#xff0c;所以只能进uboot修改启动参数 2&#xff0c;原装安卓系统应该是…...

2_2.Linux中的远程登录服务

# 一.Openssh的功能 # 1.sshd服务的用途# #作用&#xff1a;可以实现通过网络在远程主机中开启安全shell的操作 Secure SHell >ssh ##客户端 Secure SHell daemon >sshd ##服务端 2.安装包# openssh-server 3.主配置文件# /etc/ssh/sshd_conf 4.…...

Spring Boot集成JPA快速入门demo

1.JPA介绍 JPA (Java Persistence API) 是 Sun 官方提出的 Java 持久化规范。它为 Java 开发人员提供了一种对象/关联映射工具来管理 Java 应用中的关系数据。他的出现主要是为了简化现有的持久化开发工作和整合 ORM 技术&#xff0c;结束现在 Hibernate&#xff0c;TopLink&am…...

深度学习理解及学习推荐(持续更新)

主推YouTuBe和Bilibili 深度学习博主推荐&#xff1a; Umar Jamil - YouTubehttps://www.youtube.com/umarjamilai StatQuest with Josh Starmer - YouTubehttps://www.youtube.com/statquest RNN Illustrated Guide to Recurrent Neural Networks: Understanding the Int…...

【C语言】贪吃蛇【附源码】

欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 一、游戏说明&#xff1a; 一个基于C语言链表开发的贪吃蛇游戏&#xff1a; 1. 按方向键上下左右&#xff0c;可以实现蛇移动方向的改变。 2. 短时间长按方向键上下左右其中之一&#xff0c;可实现蛇向该方向的短时间…...

【技巧】压缩文件如何设置“自动加密”?

很多人会在压缩文件的时候&#xff0c;同时设置密码&#xff0c;以此保护私密文件。如果经常需要压缩文件并设置密码&#xff0c;不妨使用解压缩软件的“自动加密”功能&#xff0c;更省时省力。 下面介绍WinRAR解压缩软件的两种“自动加密”的方法&#xff0c;一起来看看吧&a…...

内网穿透时报错【Bad Request This combination of host and port requires TLS.】的原因

目录 前言&#xff1a;介绍一下内网穿透 1.内网直接https访问&#xff08;可以正常访问&#xff09; 程序配置的证书 2.内网穿透后,通过外网访问 3.原因 4.内网非https的Web应用&#xff0c;使用https后&#xff0c;也变成了https访问 5.题外话 感觉自己的web应用配置了…...

计算机网络:物理层 - 信道复用

计算机网络&#xff1a;物理层 - 信道复用 频分复用时分复用统计时分复用波分复用码分复用 计算机网络中&#xff0c;用户之间通过信道进行通信&#xff0c;但是信道是有限的&#xff0c;想要提高网络的效率&#xff0c;就需要提高信道的利用效率。因此计算机网络中普遍采用信道…...

【算法集训】基础算法:滑动窗口

定义一个快慢指针&#xff0c;用于截取数组中某一段信息。同时可以改变快慢指针的值来获取结果&#xff0c;这个过程比较像滑动。 1493. 删掉一个元素以后全为 1 的最长子数组 定义快慢指针快指针先走&#xff0c;如果到了第二个0上的时候。前面1的个数就是fast - slow - 1&a…...

QT 二维坐标系显示坐标点及点与点的连线-通过定时器自动添加随机数据点

QT 二维坐标系显示坐标点及点与点的连线-通过定时器自动添加随机数据点 功能介绍头文件C文件运行过程 功能介绍 上面的代码实现了一个简单的 Qt 应用程序&#xff0c;其功能包括&#xff1a; 创建一个 MainWindow 类&#xff0c;继承自 QMainWindow&#xff0c;作为应用程序的…...

C语言TCP服务器模型 : select + 多线程与双循环单线程阻塞服务器的比较

观察到的实验现象: 启动三个客户端: 使用双循环阻塞服务器:只能accept后等待收发,同时只能与一个客户端建立连接,必须等已连接的客户端多次收发 明确断开后才能与下个客户端连接 使用IO多路复用select:可以同时接收所有的连接请求,并且连接状态一直是存活的,直到客户端关闭连…...

【数字IC/FPGA】手撕代码:模3检测器(判断输入序列能否被3整除)

今天我们来手撕一个常见的笔试题&#xff0c;使用的方法是三段式Moore状态机。 题目描述&#xff1a; 输入端口是串行的1bit数据&#xff0c;每个时钟周期进来一位新数据后&#xff0c;实时检查当前序列是否能整除3&#xff0c;若能则输出1&#xff0c;否则输出0。 例如&#…...

最小可行产品需要最小可行架构——可持续架构(三)

前言 最小可行产品&#xff08;MVP&#xff09;的概念可以帮助团队专注于尽快交付他们认为对客户最有价值的东西&#xff0c;以便在投入大量时间和资源之前迅速、廉价地评估产品的市场规模。MVP不仅需要考虑产品的市场可行性&#xff0c;还需要考虑其技术可行性&#xff0c;以…...

笔记: 数据结构与算法--时间复杂度二分查找数组

算法复杂度 不依赖于环境因素事前分析法 计算最坏情况的时间复杂度每一条语句的执行时间都按照t来计算 时间复杂度 大O表示法 n 数据量 ; f(n) 实际的执行条数当存在一个n0 , 使得 n > n0,并且 c * g(n) 恒> f(n) : 渐进上界(算法最坏的情况)那么f(n)的时间复杂度 …...

AI绘画教程:Midjourney使用方法与技巧从入门到精通

文章目录 一、《AI绘画教程&#xff1a;Midjourney使用方法与技巧从入门到精通》二、内容介绍三、作者介绍&#x1f324;️粉丝福利 一、《AI绘画教程&#xff1a;Midjourney使用方法与技巧从入门到精通》 一本书读懂Midjourney绘画&#xff0c;让创意更简单&#xff0c;让设计…...

Spring-事务管理

1、事务管理 1.1、回滚方式 默认回滚方式&#xff1a;发生运行异常时异常和error时回滚&#xff0c;发生受查(编译&#xff09;异常时提交。不过&#xff0c;对于受查异常&#xff0c;程序员也可以手工设置其回滚方式 1.2、事务定义接口 1.2.1、事务隔离级别常量 这些常量…...

MySql实战--为什么我的MySQL会“抖”一下

时的工作中&#xff0c;不知道你有没有遇到过这样的场景&#xff0c;一条SQL语句&#xff0c;正常执行的时候特别快&#xff0c;但是有时也不知道怎么回事&#xff0c;它就会变得特别慢&#xff0c;并且这样的场景很难复现&#xff0c;它不只随机&#xff0c;而且持续时间还很短…...

【蓝桥杯第十三届省赛B】(部分详解)

九进制转十进制 #include <iostream> #include<math.h> using namespace std; int main() {cout << 2*pow(9,3)0*pow(9,2)2*pow(9,1)2*pow(9,0) << endl;return 0; }顺子日期 #include <iostream> using namespace std; int main() {// 请在此…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

golang循环变量捕获问题​​

在 Go 语言中&#xff0c;当在循环中启动协程&#xff08;goroutine&#xff09;时&#xff0c;如果在协程闭包中直接引用循环变量&#xff0c;可能会遇到一个常见的陷阱 - ​​循环变量捕获问题​​。让我详细解释一下&#xff1a; 问题背景 看这个代码片段&#xff1a; fo…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet&#xff0c;点击确认后如下提示 最终上报fail 解决方法 内核升级导致&#xff0c;需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于构建 API&#xff0c;支持 Python 3.6。它基于标准 Python 类型提示&#xff0c;易于学习且功能强大。以下是一个完整的 FastAPI 入门教程&#xff0c;涵盖从环境搭建到创建并运行一个简单的…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路

进入2025年以来&#xff0c;尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断&#xff0c;但全球市场热度依然高涨&#xff0c;入局者持续增加。 以国内市场为例&#xff0c;天眼查专业版数据显示&#xff0c;截至5月底&#xff0c;我国现存在业、存续状态的机器人相关企…...

对WWDC 2025 Keynote 内容的预测

借助我们以往对苹果公司发展路径的深入研究经验&#xff0c;以及大语言模型的分析能力&#xff0c;我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际&#xff0c;我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测&#xff0c;聊作存档。等到明…...

【配置 YOLOX 用于按目录分类的图片数据集】

现在的图标点选越来越多&#xff0c;如何一步解决&#xff0c;采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集&#xff08;每个目录代表一个类别&#xff0c;目录下是该类别的所有图片&#xff09;&#xff0c;你需要进行以下配置步骤&#x…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

MFC 抛体运动模拟:常见问题解决与界面美化

在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...