学完递归,学二叉树的迭代遍历
什么是递归什么是迭代刚刚学的层层嵌套就是递归我感觉更直观些forwhile循环就是迭代。数学代码对比绝对简单我们算一个超级简单的数学题求 1 2 3 ... n 的和。写法一迭代循环自己控制进度int sum_iterative(int n) { int result 0; for (int i 1; i n; i) { // 我用 i 手动控制当前走到哪了 result result i; } return result; }计算机在干嘛它只负责重复执行大括号里的代码。没有任何“暂停”和“回头”一路加到 n 结束。写法二递归函数调自己系统帮你暂停int sum_recursive(int n) { if (n 1) return 1; // 停止条件 return n sum_recursive(n - 1); // 在这里暂停 }计算机在干嘛假设你调用sum_recursive(5)计算机看到5 sum_recursive(4)它必须先去算sum_recursive(4)。于是它暂停当前的计算在内存里记下“这里有个 5 等着加”去算sum_recursive(4)。算sum_recursive(4)时看到4 sum_recursive(3)又暂停去算sum_recursive(3)……直到算到sum_recursive(1) 1开始逐层回头123336641010515。前序遍历核心规则死记这一句前序遍历顺序是中 - 左 - 右先处理根再处理左最后处理右在迭代法中为了实现“先左后右”入栈时必须反着来先压入右孩子再压入左孩子。因为栈Stack是后进先出LIFO——后放进去的先拿出来。为了让左孩子先被拿出来处理就必须让左孩子最后放进去。放根 ➡️ 取根记录 ➡️ 放右 ➡️ 放左class Solution { public: vectorint preorderTraversal(TreeNode* root) { stackTreeNode* st; vectorint result; if (root NULL) return result; st.push(root); while (!st.empty()) { TreeNode* node st.top(); // 中 st.pop(); result.push_back(node-val); if (node-right) st.push(node-right); // 右空节点不入栈 if (node-left) st.push(node-left); // 左空节点不入栈 } return result; } };接下来再用迭代法写中序遍历的时候会发现套路又不一样了目前的前序遍历的逻辑无法直接应用到中序遍历上。中序遍历迭代法中序是一路向左入栈存无路可走出栈记转向右边再来一次。class Solution { public: vectorint inorderTraversal(TreeNode* root) { vectorint result; stackTreeNode* st; TreeNode* cur root; while (cur ! NULL || !st.empty()) { if (cur ! NULL) { // 指针来访问节点访问到最底层 st.push(cur); // 将访问的节点放进栈 cur cur-left; // 左 } else { cur st.top(); // 从栈里弹出的数据就是要处理的数据放进result数组里的数据 st.pop(); result.push_back(cur-val); // 中 cur cur-right; // 右 } } return result; } };后序遍历把前序左右翻一下就是中右左反着输出就是左右中。class Solution { public: vectorint postorderTraversal(TreeNode* root) { stackTreeNode* st; vectorint result; if (root NULL) return result; st.push(root); while (!st.empty()) { TreeNode* node st.top(); st.pop(); result.push_back(node-val); if (node-left) st.push(node-left); // 相对于前序遍历这更改一下入栈顺序 空节点不入栈 if (node-right) st.push(node-right); // 空节点不入栈 } reverse(result.begin(), result.end()); // 将结果反转之后就是左右中的顺序了 return result; } };

相关新闻

Google Search Console 已经能单独查看 AI 搜索曝光,We0ai 网站应该重点看展示、引用还是线索?

Google Search Console 已经能单独查看 AI 搜索曝光,We0ai 网站应该重点看展示、引用还是线索?

先说结论。 如果你的站是 We0ai 这类“展示型官网 内容站 获客站”,最不该只盯着看的,反而就是那个看起来最热闹的曝光数字。 因为现在 Google 确实已经给出一个很明确的信号: AI 搜索里的可见性,开始被单独统计了。 根据 G…

2026/7/19 13:25:15 阅读更多 →
浅谈学习编程的心得与体会:从代码搬运工到独立开发者的蜕变

浅谈学习编程的心得与体会:从代码搬运工到独立开发者的蜕变

浅谈学习编程的心得与体会:从代码搬运工到独立开发者的蜕变 引言 时光荏苒,距离我敲下人生中第一行 C 语言代码,已悄然过去两年有余。回望这段旅程,仿佛一场从“代码搬运工”到“独立开发者”的蜕变之旅。我曾是那个只会照本宣科、…

2026/7/19 13:25:15 阅读更多 →
Spring应用启动性能优化深度集成指南

Spring应用启动性能优化深度集成指南

Spring应用启动性能优化深度集成指南 【免费下载链接】spring-startup-analyzer spring-startup-analyzer generates an interactive spring application startup report that lets you understand what contributes to the application startup time and helps to optimize it…

2026/7/19 13:25:15 阅读更多 →

最新新闻

AM62L MMC/SD控制器UHS-II寄存器配置与DMA优化实战

AM62L MMC/SD控制器UHS-II寄存器配置与DMA优化实战

1. 项目概述与核心价值在嵌入式系统开发,尤其是涉及高速存储接口的设计中,MMC/SD控制器是连接处理器与外部存储卡(如SD卡、eMMC芯片)的桥梁。它的性能直接决定了系统启动速度、数据读写效率乃至整个产品的用户体验。很多开发者可能…

2026/7/19 19:41:33 阅读更多 →
零基础玩转网页端多轨音频编辑,无需安装即刻创作

零基础玩转网页端多轨音频编辑,无需安装即刻创作

还在为下载安装庞大的音频编辑软件发愁?还在因为不懂复杂操作放弃音频创作?今天给大家推荐一款免安装、易上手的网页端多轨音频工作站——Inspire Pro,无论是音频剪辑、MIDI 编曲、混音后期,还是短视频配音、播客制作,…

2026/7/19 19:41:33 阅读更多 →
【AI编程×Scrum双引擎实战指南】:20年敏捷教练亲授,如何用AI重构每日站会与迭代评审(附12个真实故障场景)

【AI编程×Scrum双引擎实战指南】:20年敏捷教练亲授,如何用AI重构每日站会与迭代评审(附12个真实故障场景)

更多请点击: https://intelliparadigm.com 第一章:AI编程Scrum双引擎融合的底层逻辑 AI编程与Scrum并非简单叠加,而是基于“反馈闭环”与“认知压缩”双重机制的深度耦合。AI编程通过代码生成、缺陷预测和测试用例自动生成,持续…

2026/7/19 19:41:33 阅读更多 →
为什么你的AI会议记录总漏关键决策?揭秘声学建模偏差、语境断层与多说话人重叠的3层底层故障

为什么你的AI会议记录总漏关键决策?揭秘声学建模偏差、语境断层与多说话人重叠的3层底层故障

更多请点击: https://intelliparadigm.com 第一章:为什么你的AI会议记录总漏关键决策?揭秘声学建模偏差、语境断层与多说话人重叠的3层底层故障 AI会议转录系统在真实办公场景中频繁遗漏“我们下周上线灰度版本”“预算审批权移交至产品总监…

2026/7/19 19:41:33 阅读更多 →
中小型 B2B 贸易企业选 ERP,买断制和 SaaS 哪个更划算?

中小型 B2B 贸易企业选 ERP,买断制和 SaaS 哪个更划算?

中小 B2B 贸易企业选 ERP,付费模式是仅次于功能的核心纠结点: 一边是 SaaS 模式,按年按用户付费,门槛低、免运维,听起来轻量灵活; 另一边是买断制,一次性付费永久使用,不限账号、数据…

2026/7/19 19:41:33 阅读更多 →
交叉验证类型选择指南:从数据特性到业务风险的四维决策

交叉验证类型选择指南:从数据特性到业务风险的四维决策

1. 项目概述:交叉验证不是“选一个就行”,而是“在什么场景下必须用哪一种”“Cross-Validation Types and When to Use It”——这个标题乍看像教科书目录里的一节,但在我带过27个模型落地项目、亲手调过400组超参、被业务方凌晨三点电话追问…

2026/7/19 19:40:33 阅读更多 →

日新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/19 0:00:40 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/19 0:00:40 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/19 0:00:40 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/19 0:00:40 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/19 0:00:40 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/19 0:00:40 阅读更多 →

月新闻