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

力扣日记11.5-【二叉树篇】二叉树的迭代遍历

力扣日记:【二叉树篇】二叉树的迭代遍历

日期:2023.11.5
参考:代码随想录、力扣

144. 二叉树的前序遍历

题目描述

难度:简单

给你二叉树的根节点 root ,返回它节点值的 前序 遍历。

提示:

  • 树中节点数目在范围 [0, 100] 内
  • -100 <= Node.val <= 100

进阶:递归算法很简单,你可以通过迭代算法完成吗?

题解

cpp ver
/*** 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) {vector<int> result;traversal(root, result);return result;}void traversal(TreeNode* cur, vector<int>& vec) {// 前序遍历:中左右if (cur == NULL) return;vec.push_back(cur->val);traversal(cur->left, vec);traversal(cur->right, vec);}
};

复杂度

时间复杂度:
空间复杂度:

94. 二叉树的中序遍历

题目描述

难度:简单

给定一个二叉树的根节点 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) {// 中序遍历:左中右// 对于中序遍历,访问和处理并不是同步进行的。而是先访问到最底层的左节点,再开始处理(放进result数组)// 使用 cur 指针 先进行访问(遍历)vector<int> result;if (root == NULL) return result;stack<TreeNode*> st;TreeNode* cur = root;while (cur != NULL || !st.empty()) {if (cur != NULL) { // 指针访问节点,先遍历到最底层st.push(cur);   // 将cur入栈cur = cur->left;    // 左} else { // 处理cur = st.top();   // 中 (处理:放入result数组)st.pop();result.push_back(cur->val);cur = cur->right;   // 右 (如果右节点不为空,则在下次循环把右节点入栈;否则从栈中弹出顶部节点)}}return result;}
};

复杂度

时间复杂度:
空间复杂度:

145. 二叉树的后序遍历

题目描述

难度:简单

给你一棵二叉树的根节点 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> postorderTraversal(TreeNode* root) {// 后序遍历:左右中// 相对于前序遍历:前序遍历为 中左右 -> 把前序遍历的迭代写法的左右部分互换 -> 则为 中右左 // -> 再把result 数组反向 -> 左右中(后序遍历)vector<int> result;if (root == NULL) return result;stack<TreeNode*> st;// 先放入根节点st.push(root);while (!st.empty()) {// 中TreeNode* cur = st.top();st.pop();result.push_back(cur->val);if (cur->left != NULL) st.push(cur->left);    // 与前序遍历相反:左节点先入栈(空节点不入栈)if (cur->right != NULL)  st.push(cur->right);}// 此时result顺序为 中右左// 反向reverse(result.begin(), result.end());return result;}
};

复杂度

时间复杂度:
空间复杂度:

思路总结

  • 还是不太熟练和理解
  • 多练练

相关文章:

  • ESP32S3入手体验测试
  • 挑战100天 AI In LeetCode Day01(1)
  • 自动控制原理答案
  • leetcode 684. 冗余连接
  • 故障诊断 | MATLAB实现GRNN广义回归神经网络故障诊断
  • Redis那些事儿(三)
  • Minio多节点多驱动分布式部署官网文档翻译
  • C#将字符串(string)转换为整数(int)几种常见的方法
  • Leetcode—100.相同的树【简单】
  • Linux--线程-条件控制实现线程的同步
  • 在Google Kubernetes集群创建分布式Jenkins(一)
  • vue中app.use()做了什么
  • CSRF攻击(2), 绕过Referer防御
  • 英语——分享篇——每日200词——201-400
  • 基于单片机的智能饮水机系统
  • 「译」Node.js Streams 基础
  • Angular Elements 及其运作原理
  • Dubbo 整合 Pinpoint 做分布式服务请求跟踪
  • Java IO学习笔记一
  • k8s如何管理Pod
  • maya建模与骨骼动画快速实现人工鱼
  • Python 反序列化安全问题(二)
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • tweak 支持第三方库
  • v-if和v-for连用出现的问题
  • vue-cli在webpack的配置文件探究
  • 创建一种深思熟虑的文化
  • 反思总结然后整装待发
  • 基于 Babel 的 npm 包最小化设置
  • 一些关于Rust在2019年的思考
  • 字符串匹配基础上
  • 400多位云计算专家和开发者,加入了同一个组织 ...
  • hi-nginx-1.3.4编译安装
  • ​queue --- 一个同步的队列类​
  • #FPGA(基础知识)
  • #HarmonyOS:Web组件的使用
  • #pragma once
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • #数学建模# 线性规划问题的Matlab求解
  • (007)XHTML文档之标题——h1~h6
  • (16)Reactor的测试——响应式Spring的道法术器
  • (2024)docker-compose实战 (8)部署LAMP项目(最终版)
  • (SpringBoot)第二章:Spring创建和使用
  • (过滤器)Filter和(监听器)listener
  • (三) diretfbrc详解
  • (四) Graphivz 颜色选择
  • (循环依赖问题)学习spring的第九天
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • (一)基于IDEA的JAVA基础1
  • (转)【Hibernate总结系列】使用举例
  • (转)c++ std::pair 与 std::make
  • (转)memcache、redis缓存
  • .NET Core WebAPI中使用swagger版本控制,添加注释
  • .NET Core 中插件式开发实现
  • .net redis定时_一场由fork引发的超时,让我们重新探讨了Redis的抖动问题