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

【代码随想录 二叉树】二叉树前序、中序、后序遍历的迭代遍历

文章目录

      • 1. 二叉树前序遍历(迭代法)
      • 2. 二叉树后序遍历(迭代法)
      • 3. 二叉树中序遍历(迭代法)

1. 二叉树前序遍历(迭代法)

题目连接

在这里插入图片描述


🍎因为处理顺序和访问顺序是一致的。所以方便处理!

  • 示例代码如下所示:
/*** 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> preorderTraversal(TreeNode* root) {stack<TreeNode*> st;    // 栈:后进先出,满足递归想要获取上一个位置的逻辑vector<int> ans;if (root == nullptr)return ans;st.push(root);while (!st.empty()){TreeNode* node = st.top();ans.push_back(node->val);st.pop();// 为什么先弹入右节点呢 ? (因为栈是后进先出的)if (node->right != nullptr){st.push(node->right);}if (node->left != nullptr){st.push(node->left);}}return ans;}
};


2. 二叉树后序遍历(迭代法)

题目链接🔗
在这里插入图片描述

在这里插入图片描述

class Solution {
public:vector<int> postorderTraversal(TreeNode* root) {stack<TreeNode*> st;    // 栈:后进先出,满足递归想要获取上一个位置的逻辑vector<int> ans;if (root == nullptr)return ans;st.push(root);while (!st.empty()){TreeNode* node = st.top();ans.push_back(node->val);st.pop();//只需要改一下左右子树的遍历顺序即可if (node->left != nullptr){st.push(node->left);}if (node->right != nullptr){st.push(node->right);}}reverse(ans.begin(), ans.end());return ans;}
};


3. 二叉树中序遍历(迭代法)

题目链接🔗

在这里插入图片描述

class Solution {
public:vector<int> postorderTraversal(TreeNode* root) {stack<TreeNode*> st;    // 栈:后进先出,满足递归想要获取上一个位置的逻辑vector<int> ans;if (root == nullptr)return ans;st.push(root);while (!st.empty()){TreeNode* node = st.top();ans.push_back(node->val);st.pop();if (node->left != nullptr){st.push(node->left);}if (node->right != nullptr){st.push(node->right);}}reverse(ans.begin(), ans.end());return ans;}
};

在这里插入图片描述

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

相关文章:

  • Error:(6, 43) java: 程序包org.springframework.data.redis.core不存在
  • Qt 科目一考试系统(有源码)
  • 在 Visual Studio 2022 (VS2022) 中删除 Git 分支的步骤如下
  • 玩转OpenHarmony智能家居:如何实现开发版“碰一碰”设备控制
  • 订餐系统总结、
  • 【因果推断从入门到精通二】随机实验3
  • 真实案例分享,终端pc直接telnet不到出口路由器。
  • YOLOv8_seg的训练、验证、预测及导出[实例分割实践篇]
  • Linux基础(四):Linux系统文件类型与文件权限
  • 本是梦中人,常作花下客。心中自往来,知我有几个。
  • 创新指南|利用电商产品视频进行渠道营销的最佳策略,不断提升销售额
  • 深度学习之基于YoloV5入侵检测系统
  • 【01】全面理解JVM虚拟机
  • CentOS7离线安装Nginx
  • 面试字节大模型算法实习岗,感觉有点崩溃。。。
  • k8s 1.24.x之后如果rest 访问apiserver
  • 深度解析:用 Python 爬虫逆向破解 solscan 的请求头加密参数 Sol-Aut
  • Flutter 中的 InputDecorator 小部件:全面指南
  • useTransition:开启React并发模式
  • Android 12系统源码_多窗口模式(二)系统实现分屏的功能原理
  • 字符函数:分类函数与转换函数
  • SpringBoot 集成Mybatis
  • C语言-atoi()库函数的模拟实现
  • 定时监测服务器磁盘是否超过阈值,超过就删除docker 镜像
  • UDP聊天室
  • LLM多模态——GPT-4o改变人机交互的多模式 AI 模型应用
  • 安卓手机APP开发__蓝牙功能概述
  • get和post的区别,二者是幂等的吗?
  • 农场--Kruskal应用--c++
  • 【Crypto】Rabbit