LeetCode 力扣 热题 100道(十四)二叉树的中序遍历(C++)

给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。

如下为代码:

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:vector<int> inorderTraversal(TreeNode* root) {vector<int> result;stack<TreeNode*> stk;TreeNode* curr = root;while (curr != nullptr || !stk.empty()) {while (curr != nullptr) {stk.push(curr);curr = curr->left;}curr = stk.top();stk.pop();result.push_back(curr->val);curr = curr->right;}return result;}
};
  • vector<int> result; 用来存储中序遍历的结果。
  • stack<TreeNode*> stk; 用来模拟递归过程中访问的栈。
  • TreeNode* curr = root;curr 初始化为二叉树的根节点,用来遍历树。
  • while (curr != nullptr || !stk.empty()):这个循环会一直进行,直到遍历完所有节点。条件判断包括两部分:
  • curr != nullptr:表示当前节点还存在。
  • !stk.empty():表示栈不为空,说明还有节点待访问。
  • while (curr != nullptr):这个内层循环将沿着左子树访问,直到当前节点为空。
  • 在每一步,当前节点 curr 会被压入栈中 (stk.push(curr);),然后将 curr 移动到左子节点 (curr = curr->left;)。
  • 当左子树遍历完毕后,栈顶的节点就是当前最左的节点。
  • curr = stk.top(); 从栈中取出栈顶节点,即当前最左的节点。
  • stk.pop(); 弹出栈顶节点,因为这个节点已经被访问过。
  • result.push_back(curr->val); 将当前节点的值添加到结果数组中。
  • curr = curr->right;curr 移动到右子树节点,继续进行下一个循环。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

STM32之ADC采集和DMA传输(八)

STM32F407 系列文章 -内部ADC采集和DMA传输&#xff08;八&#xff09; 目录 前言 一、ADC特性 二、DMA特性 三、ADC采集 1.单通道ADC采集 1.头文件定义 2.函数adc_init() 3.函数HAL_ADC_MspInit() 4.函数adc_channel_set() 5.函数adc_get_result() 6.函数adc_get_r…

三菱人机界面GOT SIMPLE 系列 GS2107\GS2110\GS2512

以客户需求为核心的全面升级!GOT SIMPLE系列新功能 GOT SIMPLE升级版重磅更新&#xff0c;增添了许多期待已久的新功能&#xff0c;帮助用户实现远程维护! 扩充用户存储器容量至15MB&#xff0c;并支持轮廓字体&#xff0c;以实现平滑、靓丽的字体显示。此外&#xff0c;可使用…

VLTVG代码复现并讲解

train.py 在main函数中找到这个构建模型的地方&#xff0c;ctrl&#xff0b;左键点进这个函数中去 来到了这里 又来到了这里&#xff0c;这里就是构建模型的地方&#xff1a; 又来到了这里&#xff0c;还是在VLTVG.py这个文件中&#xff1a; Method The Overall Network Visua…

转换思维是为智

转换思维是为智 2023年11月08日(节选) 我们人的思维分为人间思维&#xff0c;圣人思维&#xff0c;菩萨思维。人间思维讲得通俗一点就是世间智慧&#xff0c;他拥有的是人间的智慧&#xff0c;讲得再简单一点&#xff0c;就是人间的聪明。圣人的思维是什么&#xff0c;是一种脱…

qtcanpool 知 10:包管理雏形

文章目录 前言痛点转机雏形实践后语 前言 曾听闻&#xff1a;C/Qt 没有包管理器&#xff0c;开发起来太不方便。这是一个有过 node.js 开发经验的人对 Qt 的吐槽。 确实&#xff0c;像 python、golang、node.js 这些编程语言都有包管理器&#xff0c;给用户带来了极佳的开发体…

光敏传感器实验

用到 ADC 采集&#xff0c;通过 ADC 采集电压&#xff0c;获取光敏传感器的电阻变化&#xff0c;从而得出环境光线的变化&#xff0c;并在 TFTLCD 上面显示出来。 光敏传感器是最常见的传感器之一&#xff0c;它的种类繁多&#xff0c;主要有&#xff1a;光电管、光电倍增管…

Modbus RTU转Profinet接4台流量器配置案例

Modbus RTU转Profinet是工业自动化领域常见的通讯协议。Modbus RTU因其简单、可靠而被广泛应用于各种设备间的数据传输&#xff0c;而Profinet则以其高速、实时性在现代工业4.0场景中扮演着重要角色。本文将详细解析如何将Modbus RTU转换为Profinet&#xff0c;并通过实际案例来…

【AI系统】推理系统架构

推理系统架构 推理系统架构是 AI 领域中的一个关键组成部分&#xff0c;它负责将训练好的模型应用于实际问题&#xff0c;从而实现智能决策和自动化。在构建一个高效的推理系统时&#xff0c;我们不仅需要考虑其性能和准确性&#xff0c;还需要确保系统的可扩展性、灵活性以及…

家事速配社区新经济与消费新业态创新峰会成功举办,开启多元合作新篇章

2024 年 11 月 28 日&#xff0c;家事速配社区新经济与消费新业态创新峰会在福建福州隆重举行&#xff0c;此次峰会汇聚了各界精英嘉宾&#xff0c;共同见证了一系列具有里程碑意义的合作签约仪式&#xff0c;为社区新经济与消费新业态的融合发展注入强大动力。 上午时分&#…

数字逻辑——二进制

目录 1 信息与编码 1.1 什么是信息&#xff1f; 1.2 什么是编码&#xff1f; 2 数制和码制 2.1 数制 3 一些基本概念 3.1 位&#xff08;bit&#xff09; 3.2 字节&#xff08;byte&#xff09; 3.3 数据量的大小表示符号 4 二进制 4.1 二进制简介 4.2 二进制的…

PyQt信号槽实现页面的登录与跳转 #页面进一步优化

将登录框中的取消按钮使用信号和槽的机制&#xff0c;关闭界面。 将登录按钮使用信号和槽连接到自定义的槽函数中&#xff0c;在槽函数中判断ui界面上输入的账号是否为"admin"&#xff0c;密码是否为"123456",如果账号密码匹配成功&#xff0c;当前界面关…

博客园-添加统计图

&#x1f496;简介 通过WPS在线列表构建博客园每日相关数据统计图。 &#x1f449;效果 &#x1f4d6;实现 前往WPS https://www.kdocs.cn/latest 新建多维表格 创建表格视图 新建仪表盘 新建卡片、折线图 卡片配置示例 折线图配置示例 点击分享获取链接 ⭐链接配置 在co…

浏览器指纹是什么?14种指纹的技术原理

视频版链接&#xff1a; 浏览器指纹是什么&#xff1f;14种指纹背后的技术原理 浏览器指纹简介 这个网站在我没登录的情况下&#xff0c;就能生成一个用户ID。即使我打开了浏览器的无痕模式&#xff0c;生成出来的ID也是一模一样。这背后的技术就是浏览器指纹。即使用户没有登…

Junit5 单元测试入门

基础知识 常用注解含义 Test&#xff1a;标记一个方法为测试方法BeforeEach&#xff1a;标记的方法会在每个测试方法执行前执行AfterEach&#xff1a;标记的方法会在每个测试方法执行后执行BeforeAll&#xff1a;标记的方法会在所有测试方法执行前执行一次AfterAll&#xff1…

JAVA-平台模块系统原理

菜鸟为了巩固所写 目录 菜鸟为了巩固所写 代码之间的依赖性 绘制类型依赖图 扩展到包之间的依赖关系 进一步延伸到jar包之间的依赖性 组件依赖图 JAVA技术领域中的两个著名的“擦除” Java类型的“大泥球” JAVA模块解析 模块解析的过程 模块路径明确模块的搜索与…

DevExtreme JS ASP.NET Core v24.2新功能预览 - 全新的聊天组件

DevExtreme拥有高性能的HTML5 / JavaScript小部件集合&#xff0c;使您可以利用现代Web开发堆栈&#xff08;包括React&#xff0c;Angular&#xff0c;ASP.NET Core&#xff0c;jQuery&#xff0c;Knockout等&#xff09;构建交互式的Web应用程序。从Angular和Reac&#xff0c…

总结与反思-50天小总结

作者&#xff1a;麻瓜也要学魔法 时间&#xff1a;2024/12/4 不知不觉中咱博客的码龄居然50天了&#xff01;内容主要就是运维方面的知识&#xff0c;主打一个学到哪发到哪。 看了看&#xff0c;50天欸&#xff01;刚好就50篇文章&#xff0c;不得不说&#xff08;咱还是真稳定…

centos8 mysql 主从复制

原理 一、一主一从 准备工作 1.主库配置 1、修改配置文件 /etc/my.cnf #mysql 服务ID&#xff0c;保证整个集群环境中唯一&#xff0c;取值范围:1-232-1&#xff0c;默认为 server-id1 #是否只读,1 代表只读,0代表读写 read-only0 #忽略的数据,指不需要同步的数据库 #binlog…

iptables防火墙SNAT与DNAT

第二章 iptables防火墙SNAT与DNAT 文章目录 第二章 iptables防火墙SNAT与DNAT1 SNAT1.1 SNAT原理与应用1.2 SNAT工作原理1.3 SNAT转换前提条件2 SNAT示例2.1 网关[服务器配置](https://so.csdn.net/so/search?q服务器配置&spm1001.2101.3001.7020)2.1.1 网关服务器配置网卡…

【推荐100个unity插件之36】Unity6使用DOTS基础篇——Entities(非常适合做一些弹幕射击游戏)

文章目录 前言DOTS 核心组成DOTS 解决传统问题的痛点1、优化内存布局&#xff1a;2、减少垃圾回收和内存管理开销&#xff1a;3、提高并行计算能力&#xff1a;4、高效的系统和组件设计&#xff1a;5、易于扩展和优化&#xff1a; 安装文档在编辑器下构建 ECS World查看Entity的…