代码随想录算法训练营第十四天| 144. 二叉树的前序遍历 ,145. 二叉树的后序遍历,94. 二叉树的中序遍历

在这里插入图片描述
在这里插入图片描述
两种写法,递归和非递归写法

递归:

/*** 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> res;void travel(TreeNode* root){if(root == NULL){return;}res.push_back(root->val);travel(root->left) ;travel(root->right) ;}vector<int> preorderTraversal(TreeNode* root) {travel(root);return res;}
};

非递归:

/*** 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> res;stack<TreeNode*> stackOrder;if(root == NULL){return res;}stackOrder.push(root);while(!stackOrder.empty()){TreeNode * node = stackOrder.top();stackOrder.pop();if(node != NULL){if(node->right != NULL){stackOrder.push(node->right);}if(node->left != NULL){stackOrder.push(node->left);}stackOrder.push(node);stackOrder.push(NULL);}else{TreeNode * cur = stackOrder.top();stackOrder.pop();res.push_back(cur->val);}}return res;}
};

后序遍历:

在这里插入图片描述
递归:

/*** 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> res;void travel(TreeNode* root){if(root == NULL){return;}travel(root->left);travel(root->right);res.push_back(root->val);}vector<int> postorderTraversal(TreeNode* root) {travel(root);return res;}
};

非递归:

/*** 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) {vector<int> res;stack<TreeNode*> stackOrder;if(root == NULL){return res;}stackOrder.push(root);while(!stackOrder.empty()){TreeNode * node = stackOrder.top();stackOrder.pop();if(node != NULL){stackOrder.push(node);stackOrder.push(NULL);if(node->right){stackOrder.push(node->right);}if(node->left){stackOrder.push(node->left);}}else{TreeNode* cur = stackOrder.top();stackOrder.pop();res.push_back(cur->val);}}return res;}
};

在这里插入图片描述
递归:

/*** 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> res;void travel(TreeNode* root){if(root == NULL){return;}travel(root->left);res.push_back(root->val);travel(root->right);}vector<int> inorderTraversal(TreeNode* root) {travel(root);return res;}
};

非递归:

/*** 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) {vector<int> res;stack<TreeNode*> stackOrder;if(root == NULL){return res;}stackOrder.push(root);while(!stackOrder.empty()){TreeNode * node = stackOrder.top();stackOrder.pop();if(node!= NULL){if(node->right != NULL){stackOrder.push(node->right);}stackOrder.push(node);stackOrder.push(NULL);if(node->left != NULL){stackOrder.push(node->left);}}else{TreeNode * cur = stackOrder.top();stackOrder.pop();res.push_back(cur->val);}}return res;}
};

用栈来记录访问的元素,同时不断调整栈顶元素所在子树的操作次序,需要进行操作的节点前加入空节点NULL

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/513321.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

总线要点笔记

1. AXI/AHB/APB差异 AMBA (Advanced Microcontroller Bus Architecture) 高级处理器总线架构 AHB (Advanced High-performance Bus) 高级高性能总线 ASB (Advanced System Bus) 高级系统总线 APB (Advanced Peripheral Bus) 高级外围总线 AXI (Advanced eXtensible Interface) …

HFSS仿真双频微带天线学习笔记

HFSS仿真双频微带天线 文章目录 HFSS仿真双频微带天线1、 求解器设置2、 建模3、 激励方式设置4、 边界条件设置5、 扫频设置6、 设计检查&#xff0c;仿真分析7、 数据后处理 这里重点关注HFSS软件的操作&#xff0c;关于理论知识将在后面的文章中进行更新。 设计要求&#xf…

算法设计.

文章目录 1. 贪心算法&#xff1a;只看当前1.1 零钱兑换问题&#xff1a;力扣322 2. 活动选择问题3. 动态规划3.1 不同路径&#xff1a;3.2 0-1背包问题3.3 完全背包问题3.4 零钱兑换-动态规划 4. 最长公共字串--动态规划5. 最长公共子序列6. 最长递增子序列7. 打家劫舍8. 全排…

android开发框架qmui,View的这些基础知识你必须要知道

今天在浏览技术新闻的时候&#xff0c;发现腾讯就在今天开源了一套 Android 原生的 UI 框架。你们有没有发现&#xff0c;腾讯特别喜欢干这种事&#xff0c;哪一种事呢&#xff1f;喜欢开源 UI 框架&#xff0c;小程序也是这样的。 我看到这个新闻后&#xff0c;第一时间就下载…

【ue5】滑铲系统蓝图笔记

大致逻辑如下&#xff1a; 一、导入动画 滑铲蹲待机蹲行走 导入到文件夹中 可以右键设置颜色&#xff0c;便于区分。 二、调整动画 1.启动根运动 启动根运动后&#xff0c;人物才可以位移&#xff0c;不然只能在原地。 打开动画序列&#xff0c;勾选启用根运动Enabled…

浏览器发出一个请求到收到响应步骤详解

前言 在网络通信中&#xff0c;浏览器向Web服务器发送HTTP请求消息的过程是一个复杂而精密的环节&#xff0c;涉及到URL解析、DNS解析、数据拆分、路由表规则和MAC头部添加等一系列步骤。本文将深入探讨这一过程的每个环节&#xff0c;帮助读者更全面地了解浏览器与Web服务器之…

【排序】详解归并排序

一、思想 归并排序的核心思想是分治法&#xff0c;即将大问题分解成小问题来解决&#xff0c;然后再将解决后的小问题的结果合并以解决原来的大问题。具体包括以下几个步骤&#xff1a; 分解&#xff08;Divide&#xff09;&#xff1a;将原始数组不断地二分成更小的子数组&a…

LeetCode 热题 100 (尽量ACM模式刷) 持续更新!!!

LeetCode 热题 100 哈希hash 1 两数之和 /** 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出和为目标值target的那两个整数&#xff0c;并返回它们的数组下标。* 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案…

【OpenGL】(1) 专栏介绍:OpenGL 库 | 3D 计算机图形应用 | GPGPU 计算 | 3D 建模和 3D动画 | 渲染技术介绍

&#x1f517; 《C语言趣味教程》&#x1f448; 猛戳订阅&#xff01;&#xff01;&#xff01; &#x1f4ad; 写在前面&#xff1a;本专栏主要内容是关于 3D 计算机图形技术的学习&#xff0c;重点是学习与此技术相关的 3D 实时渲染 (3D real-time rendering) 技术。我们会以…

杂记-文献阅读软件彻底从Readpaper转到Zotero

主要原因 Readpaper目前免费&#xff0c;但是vip制度明显时刻想着如何盈利。如果功能完善也就罢了&#xff0c;可惜功能还不如免费的Zotero&#xff1b;Zotero除了没有Readpaper的AI帮读功能以外&#xff0c;其他功能都有&#xff1b;最主要原因是Readpaper居然不支持离线阅读…

YOLO算法改进Backbone系列之:RepViT

摘要&#xff1a;近年来&#xff0c;与轻量级卷积神经网络(cnn)相比&#xff0c;轻量级视觉变压器(ViTs)在资源受限的移动设备上表现出了更高的性能和更低的延迟。这种改进通常归功于多头自注意模块&#xff0c;它使模型能够学习全局表示。然而&#xff0c;轻量级vit和轻量级cn…

不同用户同时编辑商品资料导致的db并发覆盖

背景 这个问题的背景来源于有用户反馈&#xff0c;他在商品系统中对商品打的标签不见了&#xff0c;影响到了前端页面上商品的资料显示 不同用户编辑同一商品导致的数据覆盖问题分析 查询操作日志发现用户B确实编辑过商品资料&#xff0c;并且日志显示确实打上了标签&#x…