刷题了:144.二叉树的前序遍历心|145.二叉树的后序遍历心|94.二叉树的中序遍历己

递归遍历

文章讲解:https://programmercarl.com/%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E9%80%92%E5%BD%92%E9%81%8D%E5%8E%86.html#%E6%80%9D%E8%B7%AF
视频讲解:https://www.bilibili.com/video/BV1Wh411S7xt/?spm_id_from=333.788&vd_source=e70917aa6392827d1ccc8d85e19e8375
题目链接:https://programmercarl.com/%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E9%80%92%E5%BD%92%E9%81%8D%E5%8E%86.html#%E6%80%9D%E8%B7%AF
实现情况:

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

在这里插入图片描述

题目链接:https://leetcode.cn/problems/binary-tree-postorder-traversal/description/
实现情况:

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

在这里插入图片描述

题目链接:https://leetcode.cn/problems/binary-tree-inorder-traversal/description/
实现情况:

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

在这里插入图片描述

迭代遍历

题目链接:https://leetcode.cn/problems/binary-tree-preorder-traversal/
实现情况:

/*** 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> 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;}
};

在这里插入图片描述

题目链接:[:https://leetcode.cn/problems/binary-tree-postorder-traversal/description/]
实现情况:

/*** 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> 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();st.pop();result.push_back(cur->val);cur = cur->right;}}return result;}
};

在这里插入图片描述
题目链接:https://leetcode.cn/problems/binary-tree-postorder-traversal/
实现情况:

/*** 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) {stack<TreeNode*> st;vector<int> 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;}
};

在这里插入图片描述

统一迭代

题目链接:https://leetcode.cn/problems/binary-tree-inorder-traversal/
实现情况:

/*** 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> result;stack<TreeNode*> st;if (root != NULL)st.push(root);while (!st.empty()) {TreeNode* node = st.top();st.pop();if (node != NULL) {if (node->right) {st.push(node->right);} // 添加右节点(空节点不入栈)st.push(node); // 添加中节点st.push(NULL); // 做标记if (node->left) {st.push(node->left);} // 添加左节点(空节点不入栈)} else { // 只有遇到空节点的时候,才将下一个节点放进结果集node = st.top(); // 重新取出栈中元素st.pop();result.push_back(node->val); // 加入到结果集}}return result;}
};

在这里插入图片描述

题目链接:
实现情况:

/*** 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;stack<TreeNode*> st;if (root != NULL)st.push(root);while (!st.empty()) {TreeNode* node = st.top();st.pop();if (node != NULL) {if (node->right) {st.push(node->right);} // 添加右节点(空节点不入栈)if (node->left) {st.push(node->left);} // 添加左节点(空节点不入栈)st.push(node); // 添加中节点st.push(NULL); // 做标记} else { // 只有遇到空节点的时候,才将下一个节点放进结果集node = st.top(); // 重新取出栈中元素st.pop();result.push_back(node->val); // 加入到结果集}}return result;}
};

在这里插入图片描述

题目链接:
实现情况:

/*** 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> result;stack<TreeNode*> st;if (root != NULL)st.push(root);while (!st.empty()) {TreeNode* node = st.top();st.pop();if (node != NULL) {st.push(node); // 添加中节点st.push(NULL); // 做标记if (node->right) {st.push(node->right);} // 添加右节点(空节点不入栈)if (node->left) {st.push(node->left);} // 添加左节点(空节点不入栈)} else { // 只有遇到空节点的时候,才将下一个节点放进结果集node = st.top(); // 重新取出栈中元素st.pop();result.push_back(node->val); // 加入到结果集}}return result;}
};

在这里插入图片描述

层序遍历

文章讲解:https://programmercarl.com/0102.%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E5%B1%82%E5%BA%8F%E9%81%8D%E5%8E%86.html
视频讲解:https://www.bilibili.com/video/BV1GY4y1u7b2/?spm_id_from=333.788&vd_source=e70917aa6392827d1ccc8d85e19e8375

题目链接:
https://leetcode.cn/problems/maximum-depth-of-binary-tree/
给定一个二叉树 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:int maxDepth(TreeNode* root) {if(root == NULL)return 0;int depth = 0;queue<TreeNode*> que;que.push(root);while(!que.empty()){int size = que.size();depth++;//记录深度for(int s = 0; s <size; s++){TreeNode* node = que.front();//中que.pop();if(node->left){//左que.push(node->left);}if(node->right){//右que.push(node->right);}}}return depth;}
};

在这里插入图片描述

题目链接:
https://leetcode.cn/problems/minimum-depth-of-binary-tree/description/
给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
说明:叶子节点是指没有子节点的节点。

实现情况:

/*** 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:int minDepth(TreeNode* root) {if (root == NULL)return 0;int depth = 0;queue<TreeNode*> que;que.push(root);while (!que.empty()) {int size = que.size();depth++; // 记录最小深度for (int i = 0; i < size; i++) {TreeNode* node = que.front();que.pop();if (node->left)que.push(node->left);if (node->right)que.push(node->right);if (!node->left &&!node->right) { // 当左右孩子都为空的时候,说明是最低点的一层了,退出return depth;}}}return depth;}}
;

在这里插入图片描述

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

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

相关文章

【Websim.ai】一句话让AI帮你生成一个网页

【Websim.ai】一句话让AI帮你生成一个网页 网站链接 websim.ai 简介 websim.ai接入了Claude Sonnet 3.5&#xff0c;GPT-4o等常用的LLM&#xff0c;只需要在websim.ai的官网指令栏中编写相关指令&#xff0c;有点类似大模型的Prompt&#xff0c;指令的好坏决定了网页生成的…

全网最全robotframework自动化测试环境搭建

一、前言 1、在2019年之前&#xff0c;robotframework-ride的版本一直是1.5.2.1&#xff0c;是2016年1月份的版本&#xff0c;只能安装在python2.7的环境上&#xff0c;导致如果想同时使用robotframework做测试且又需要python3环境编写python代码的小伙伴都需要在操作系统上安…

Open3D 计算去质心后的点云

目录 一、概述 1.1原理 1.2实现步骤 二、代码实现 2.1关键函数 2.2完整代码 三、实现效果 3.1原始点云 3.2处理后点云 Open3D点云算法汇总及实战案例汇总的目录地址&#xff1a; Open3D点云算法与点云深度学习案例汇总&#xff08;长期更新&#xff09;-CSDN博客 一、…

linux运维脚本编写

目录 步骤1 系统基本信息的检查 步骤2 文件系统和磁盘信息的检查 步骤3 内存、cpu、进程信息的检查 1、内存信息检查 2、cpu信息检查 3、进程信息检查 步骤4 其他脚本 正文部分✌ 步骤1 系统基本信息的检查 巡检脚本 步骤2 文件系统和磁盘信息的检查 具体实现的shell脚本如…

轻松实现远程智能交互:OriginBot与钉钉和GPT4o的集成指南

说明 我之前实现了简单UI来跟OriginBot交互&#xff0c;可以参考这里&#xff1a;古月居 - ROS机器人知识分享社区 但是由于我不是专业的前端开发&#xff0c;写UI还是比较耗时的&#xff0c;所以最近想修改一下这部分。 还有一个原因是&#xff0c;自己开发前端&#xff0c…

【嵌入式】前言

如今已经很少有产品不涉及到嵌入式&#xff0c;而把这种产品称为嵌入式系统的产品 嵌入式系统的特点就是软件、硬件可以裁切。 嵌入式未来发展趋势&#xff0c;网络化、节能化和智能化。 中国是嵌入式行业中重要的制造者和消费者&#xff0c;但我国还是有很多发展问题&#xf…

JAVA小白学习日记Day10

1.线程锁 使用Runnable接口和Lambda表达式&#xff1a; 在 EasyThreadA 类的 mainA 方法中&#xff0c;通过创建 Runnable 实例 run&#xff0c;并使用Lambda表达式。 EasyThreadA::method 绑定到 run 上。然后创建两个线程 a 和 b&#xff0c;分别启动它们&#xff0c;它们会…

NebulaGraph图数据库使用教程

一、NebulaGraph 是什么&#xff1f; NebulaGraph 是一款开源的图数据库&#xff0c;擅长处理千亿个顶点和万亿条边的超大规模数据集。 NebulaGraph 社区已成长为一个荟聚了众多用户、融合了各类图技术场景实践知识的活跃开源社区。你可以在其中与大家共同交流 NebulaGraph 周…

音视频开发入门很难?可能是你姿势不对

作为程序员&#xff0c;听到最烦的两个词一个是bug&#xff0c;在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「音视频开发的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大…

深度学习之优化器(简要总结)

优化器是用于训练神经网络模型的关键组件&#xff0c;它们决定了模型参数如何根据损失函数的梯度进行更新。不同的优化器具有不同的特性和适用场景。 下面将介绍几种常见的深度学习优化器&#xff0c;以及基于pytorch版本的定义和使用方法。 1.SGD&#xff08;Stochastic Gra…

【书生大模型实战】L1-书生大模型全链路开源体系

一、关卡任务 观看本关卡视频后&#xff0c;写一篇关于书生大模型全链路开源开放体系的笔记。 视频链接&#xff1a;【书生浦语大模型全链路开源体系】 https://www.bilibili.com/video/BV1Vx421X72D/?share_sourcecopy_web 二、实验过程 书生浦语大模型全链路开源体系&am…

JavaScript字符串转换成base64编码方法

// base64编码表 const base64EncodeChars ref<string>("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789/" );/*** base64编码* param {Object} str*/ const base64encode (str: string) > {let result "";// 循环遍历字符串…

银行贷款信用评分不足?大数据帮你找回失去的“分”

在这个信息爆炸的时代&#xff0c;无论是个人还是企业&#xff0c;数据都成为了衡量信用和评估风险的重要依据。贷款、融资、求职甚至是日常消费&#xff0c;都可能因为一份好的数据报告而变得更加顺畅。那么&#xff0c;如何高效地查询自己的大数据&#xff0c;面对评分不足时…

Typescript配置文件(tsconfig.json)详解系列五:allowArbitraryExtensions

前言 本文使用的Typescript版本为5.5.2 配置 {compilerOptions: {"allowArbitraryExtensions": true} }说明 allowArbitraryExtensions是typescript5.x后加入的字段&#xff0c;允许我们可以导入任何后缀名的文件。 并且我们必须要有一个和这个文件配套的类型声明…

【持续集成_02课_Jenkins+Git+Gogs综合应用】

https://www.cnblogs.com/xfeiyun/p/17510472.html Jenkins部署及持续集成——傻瓜式教程-腾讯云开发者社区-腾讯云 一、Jenkins安装 Jenkins由Java语言编写而成&#xff0c;安装包即是一个war包。因此&#xff0c;Jenkins的运行启动依赖于Java环境&#xff0c;同时&#xf…

G120 EPos配置方案及应用场景

EPos功能就是基本定位器功能,它可计算出轴的运行特性,使轴以时间最佳的方式移动到目标位置。EPos功能主要包括:设定值 直接给定(MDI)功能、 选择程序段功能、回参考点功能、点动功能、运行到固定挡块功能。 EPos功能通过处理给定的加速度、速度和位置值生成运行特性曲线,…

正则采集器之四——采集网站管理

本文介绍正则采集器的采集网站管理的开发。 系统需要动态添加采集网站&#xff0c;对网站地址、名称、匹配商品的正则表达式字段进行设置。 新建数据库表 CREATE TABLE item_website (id bigint NOT NULL AUTO_INCREMENT,code varchar(16) CHARACTER SET utf8mb4 COLLATE ut…

springbootsecurity整合thymeleaf

首先创建一个springboot项目 然后加入相关依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation&q…

昇思 25 天学习打卡营第 15 天 | mindspore 实现 VisionTransformer 图像分类

1. 背景&#xff1a; 使用 mindspore 学习神经网络&#xff0c;打卡第 15 天&#xff1b;主要内容也依据 mindspore 的学习记录。 2. Vision Transformer 介绍&#xff1a; mindspore 实现 VisionTransformer 图像分类&#xff1b;VisionTransformer 论文地址 VisionTransfo…

深入分析MiniQMT实时订阅延迟测试代码

摘要 本文将深入分析两段MiniQMT平台的Python代码&#xff0c;这些代码用于测试实时数据订阅的延迟情况。我们将详细探讨代码的结构、关键功能以及它们在实时交易策略中的应用&#xff0c;并通过代码示例展示其工作原理。 背景介绍 MiniQMT是一个量化交易平台&#xff0c;支…