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

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

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

相关文章

Redis怎么测?这篇文章写的太全了

Redis是一个高性能、内存数据库和缓存系统&#xff0c;在开发和生产环境中被广泛应用。本文将介绍如何进行有效的Redis软件测试&#xff0c;以确保其稳定性、高性能和可靠性。 Redis作为一种非关系型数据库和缓存系统&#xff0c;被广泛用于支持高流量、低延迟的应用。为了保证…

算法学习——LeetCode力扣动态规划篇9(1035. 不相交的线、53. 最大子数组和、392. 判断子序列、115. 不同的子序列)

算法学习——LeetCode力扣动态规划篇9 1035. 不相交的线 1035. 不相交的线 - 力扣&#xff08;LeetCode&#xff09; 描述 在两条独立的水平线上按给定的顺序写下 nums1 和 nums2 中的整数。 现在&#xff0c;可以绘制一些连接两个数字 nums1[i] 和 nums2[j] 的直线&#x…

【分析教程】unity游戏修改so文件

基础知识 0x1.apk安装后在手机中的目录 apk安装后会在两个包下生成相关包&#xff1a;data/data/、data/app/。 这里拿网易云音乐的安装目录举例。Data/App目录下通常会有三个文件&#xff1a; lib文件夹&#xff08;包含so库文件&#xff09;、 ‚oat文件夹&#xff08;O…

计算机网络-RIP动态路由协议简介

一、概述 前面我们学习了动态路由协议按照工作机制及算法划分可以分为&#xff1a;距离矢量路由协议DV型和链路状态路由协议LS型。RIP就是典型的距离矢量路由协议&#xff0c;但是实际工作中用得已经比较少了。 距离矢量路由协议DV: RIP 链路状态路由协议LS: OSPF IS-IS 二、RI…

C++11:基于C++98的语法更新

一、简介 在2003年C标准委员会曾经提交了一份技术勘误表(简称TC1)&#xff0c;使得C03这个名字已经取代了 C98称为C11之前的最新C标准名称。不过由于C03(TC1)主要是对C98标准中的漏洞 进行修复&#xff0c;语言的核心部分则没有改动&#xff0c;因此人们习惯性的把两个标准合并…

【机器学习】数据探索---python主要的探索函数

在上一篇博客【机器学习】数据探索(Data Exploration)—数据质量和数据特征分析中&#xff0c;我们深入探讨了数据预处理的重要性&#xff0c;并介绍了诸如插值、数据归一化和主成分分析等关键技术。这些方法有助于我们清理数据中的噪声、消除异常值&#xff0c;以及降低数据的…

设计模式-概述篇

1. 掌握设计模式的层次 第1层&#xff1a;刚开始学编程不久&#xff0c;听说过什么是设计模式第2层&#xff1a;有很长时间的编程经验&#xff0c;自己写了很多代码&#xff0c;其中用到了设计模式&#xff0c;但是自己却不知道第3层&#xff1a;学习过了设计模式&#xff0c;…

MATLAB 自定义生成圆柱点云(49)

MATLAB 自定义生成圆柱点云(49) 一、算法介绍二、具体实现1.代码2.效果一、算法介绍 按照一些提前指定的圆柱参数,自定义生成圆柱点云,可添加噪声,用于后续的实验测试 二、具体实现 1.代码 代码如下(示例): % 指定圆柱的参数 radius = 5; % 圆柱半径 height = 20…

springcloud基本使用三(搭建nacos)

window下安装nacos: 下载页面:Releases alibaba/nacos GitHuban easy-to-use dynamic service discovery, configuration and service management platform for building cloud native applications. - Releases alibaba/nacoshttps://github.com/alibaba/nacos/releases…

医药行业CRM解决方案:如何选择适合的医药CRM系统?

医药市场的竞争也同样激烈&#xff0c;抓住市场、抢占客户拼的是产品、速度&#xff0c;更是精细化的客户管理。如何抓住客户&#xff0c;并留住客户&#xff0c;是医药公司要考虑的问题。人工机械地记录数据信息很容易就被市场淘汰&#xff0c;所以医药公司也需要用数字化工具…

大语言模型中常用的旋转位置编码RoPE详解:为什么它比绝对或相对位置编码更好?

自 2017 年发表“ Attention Is All You Need ”论文以来&#xff0c;Transformer 架构一直是自然语言处理 (NLP) 领域的基石。它的设计多年来基本没有变化&#xff0c;随着旋转位置编码 (RoPE) 的引入&#xff0c;2022年标志着该领域的重大发展。 旋转位置嵌入是最先进的 NLP…

一文get,最容易碰上的接口自动化测试问题汇总

本篇文章分享几个接口自动化用例编写过程遇到的问题总结&#xff0c;希望能对初次探索接口自动化测试的小伙伴们解决问题上提供一小部分思路。 sql语句内容出现错误 空格&#xff1a;由于有些字段判断是变量&#xff0c;需要将sql拼接起来&#xff0c;但是在拼接字符串时没有…

Python接口自动化测试-篇1(postman+requests+pytest+allure)

Python接口自动化测试是一种使用Python编程语言来编写脚本以自动执行针对应用程序接口&#xff08;APIs&#xff09;的测试过程。这种测试方法专注于检查系统的不同组件或服务之间的交互&#xff0c;确保它们按照预期规范进行通信&#xff0c;而不涉及用户界面&#xff08;UI&a…

CVE-2021-38001:TianfuCup RCE bug Type confusion in LoadIC::ComputeHandler

文章目录 前言环境搭建漏洞分析漏洞利用总结参考 前言 该漏洞在似乎在 bugs.chromium 上没有公开&#xff1f;笔者并没有找到相关漏洞描述&#xff0c;所以这里更多参考了别人的分析。 本文需要一定的 ICs 相关知识&#xff0c;请读者自行先查阅学习&#xff0c;比较简单&…

国内ip怎么来回切换:操作指南与注意事项

在数字化时代&#xff0c;互联网已经成为我们日常生活、学习和工作中不可或缺的一部分。然而&#xff0c;随着网络应用的不断深化&#xff0c;用户对于网络环境的稳定性和安全性要求也越来越高。其中&#xff0c;IP地址作为网络中的关键标识&#xff0c;其切换与管理显得尤为重…

Navicat 干货 | 通过检查约束确保 PostgreSQL 的数据完整性

数据完整性对于任何数据库系统来说都是很重要的一方面&#xff0c;它确保存储的数据保持准确、一致且有意义的。在 PostgreSQL 中&#xff0c;维护数据完整性的一个强大工具是使用检查约束。这些约束允许你定义数据必须遵守的规则&#xff0c;以防止无效数据的插入或修改。本文…

matlab 复制点云

目录 一、概述1、算法概述2、主要函数3、参考文献二、代码实现三、结果展示四、参考链接本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、概述 1、算法概述

Leetcode 617. 合并二叉树

心路历程&#xff1a; 看到两颗二叉树的问题&#xff0c;第一反应想到了同频遍历&#xff0c;然后每一步创建新的结点&#xff0c;虽然也写出来了但是代码比较长&#xff0c;而且空间复杂度比较高&#xff0c;好处是没有修改原始的两个二叉树的结果。 后来看了网上的解答&…

工业以太网交换机 vs. 常规以太网交换机:全面详细比较

概述 以太网交换机是现代计算机网络中的关键设备&#xff0c;用于连接各种设备&#xff0c;实现数据传输和通信。工业以太网交换机和常规以太网交换机之间存在一些重要区别&#xff0c;涉及到应用环境、设计、性能和功能。让我们深入探讨这些方面&#xff0c;帮助您更好地理解…

kind+tidb

官网介绍&#xff1a;在 Kubernetes 上快速上手 TiDB | PingCAP 文档中心 下面是具体细节&#xff1a; 一、安装 1.安装kind&#xff0c;一定要使用最新版本&#xff01;&#xff01;&#xff01; kind官网&#xff1a;kind – Quick Start curl -Lo ./kind https://kind.s…