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

Day22-二叉树的迭代遍历

昨天学习了递归遍历:递归就是一次次的把参数压入栈中,然后返回的时候还是上一次递归保存的参数。

今天学习迭代遍历。

迭代遍历就是用栈去模拟保存二叉树的节点,然后依次去遍历,只不过要注意栈的后入先出的规则。

前序遍历:前序遍历的顺序应该是中左右,每次先处理中间节点,先把中间节点放入栈中,然后只要栈不为空就再调用一个指针去遍历二叉树,不过这个时候要注意:要先存放右节点,再存放左节点。

顺序应该是:12453 

迭代过程

  1. 栈初始化为 [1] → 弹出 1,记录 1,压入 3, 2(栈变为 [3, 2])。

  2. 弹出 2,记录 2,压入 5, 4(栈变为 [3, 5, 4])。

  3. 弹出 4,记录 4(无子节点,栈变为 [3, 5])。

  4. 弹出 5,记录 5(无子节点,栈变为 [3])。

  5. 弹出 3,记录 3(无子节点,栈为空)

代码实现:

class Solution {
public:
vector<int> inorderTraversal(TreeNode* root) {vector<int> result;stack<TreeNode*> 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;}
};

中序遍历:

这个不能直接修改前序遍历的代码:

迭代思路

  1. 从根开始一路向左,把经过的节点全部压栈(不访问)。

  2. 弹出栈顶,访问它(这就是“根”)。

  3. 转向它的右子树,重复步骤1

class Solution {
public:
vector<int> inorderTraversal(TreeNode* root) {vector<int> result;stack<TreeNode*> 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;}
};

后序遍历:

这个和前序遍历基本上一样,只不过最后翻转一下数组就好了。

http://www.lryc.cn/news/603037.html

相关文章:

  • 代码随想录Day32:动态规划(斐波那契数、爬楼梯、使用最小花费爬楼梯)
  • 10:00开始面试,10:06就出来了,问的问题有点变态。。。
  • Jmeter 性能测试监控之ServerAgent
  • AT89C 系列单片机知识点总结
  • 基于VHDL的神经网络加速器设计实战
  • 基于亮数据 MCP 的 Trae 智能体,让规模化 Google 数据实时分析触手可及
  • DBAPI的SQL实现模糊查询的3种方案
  • git相关操作记录
  • C++初学者4——标准数据类型
  • Day 24:元组与os模块
  • STM32F4—电源管理器
  • 新华三H3CNE网络工程师认证—Telnet
  • 在 CentOS 中安装 MySQL 的过程与问题解决方案
  • 每日面试题16:什么是双亲委派模型
  • LINUX 728 SHELL:grep;sort;diff
  • mp核心功能
  • CDN架构全景图
  • 【JavaScript】箭头函数和普通函数的区别
  • 【AI论文】MegaScience:推动科学推理后训练数据集的前沿发展
  • Node.js + TypeScript 开发健壮的淘宝商品 API SDK
  • Flutter实现Android原生相机拍照
  • 项目任务如何分配?核心原则
  • MongoDB的内存和核心数对于运行效率的影响
  • Python动态规划:从基础到高阶优化的全面指南(2)
  • 商用车的自动驾驶应用场景主要包括七大领域
  • 代码随想录算法训练营第三十三天
  • C++模板进阶:从基础到实战的深度探索
  • 网易易盾、腾讯ACE等主流10款游戏反外挂系统对比
  • 7寸工业模组 XA070Y2-L01芯显科技详细参数资料
  • 图——邻接表基本操作算法实现