学完递归,学二叉树的迭代遍历
什么是递归什么是迭代刚刚学的层层嵌套就是递归我感觉更直观些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/26 1:45:16 阅读更多 →
浅谈学习编程的心得与体会:从代码搬运工到独立开发者的蜕变

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

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

2026/7/26 12:14:02 阅读更多 →
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/26 0:04:14 阅读更多 →

最新新闻

AI技术落地实践:从算法优化到行业应用

AI技术落地实践:从算法优化到行业应用

1. 从政策到落地:AI技术渗透各行业的现状观察最近两年,AI技术正在经历从实验室走向产业化的关键转折期。这种转变呈现出明显的"自上而下"特征:一方面是国家层面的政策引导,另一方面是企业和个人开发者的具体实践。作为长…

2026/7/26 14:09:27 阅读更多 →
Linux静态库与动态库:原理、创建与使用指南

Linux静态库与动态库:原理、创建与使用指南

1. 理解库文件的基本概念在Linux开发环境中,库文件是代码复用和模块化开发的核心组件。简单来说,库就是预先编译好的函数和资源的集合,开发者可以直接调用而无需重新实现。这就像是一个工具箱,里面装满了各种现成的工具&#xff0…

2026/7/26 14:09:27 阅读更多 →
终极Adobe Illustrator自动化脚本指南:30+免费工具解放你的设计时间

终极Adobe Illustrator自动化脚本指南:30+免费工具解放你的设计时间

终极Adobe Illustrator自动化脚本指南:30免费工具解放你的设计时间 【免费下载链接】illustrator-scripts Adobe Illustrator scripts 项目地址: https://gitcode.com/gh_mirrors/il/illustrator-scripts 你是否每天在Adobe Illustrator中重复着相同的机械操…

2026/7/26 14:09:27 阅读更多 →
AM261x SDFM模块深度解析:高精度采集与高速保护的硬件实现

AM261x SDFM模块深度解析:高精度采集与高速保护的硬件实现

1. 项目概述:从比特流到精准控制,SDFM模块的工业价值 在电机驱动、伺服控制或者高精度电源管理这类对实时性和精度要求都极高的工业应用里,我们工程师最头疼的问题之一,就是如何准确、快速地获取关键的模拟量信号,比如…

2026/7/26 14:09:27 阅读更多 →
5个高效技巧:掌握Illustrator脚本自动化工作流

5个高效技巧:掌握Illustrator脚本自动化工作流

5个高效技巧:掌握Illustrator脚本自动化工作流 【免费下载链接】illustrator-scripts Adobe Illustrator scripts 项目地址: https://gitcode.com/gh_mirrors/il/illustrator-scripts 如果你经常使用Adobe Illustrator进行设计工作,可能会发现重复…

2026/7/26 14:09:27 阅读更多 →
5分钟搭建个人数字图书馆:novel-downloader小说批量下载器终极指南

5分钟搭建个人数字图书馆:novel-downloader小说批量下载器终极指南

5分钟搭建个人数字图书馆:novel-downloader小说批量下载器终极指南 【免费下载链接】novel-downloader 一个可扩展的通用型小说下载器。 项目地址: https://gitcode.com/gh_mirrors/no/novel-downloader 在这个信息飞速流动的时代,你是否曾为心爱…

2026/7/26 14:08:27 阅读更多 →

日新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/26 0:00:31 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/26 0:00:31 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/26 0:00:31 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/26 0:00:31 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/26 0:00:31 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/26 0:00:31 阅读更多 →

月新闻