代码随想录训练营Day11 | 226.翻转二叉树 - 101. 对称二叉树 - 104.二叉树的最大深度 - 111.二叉树的最小深度

226.翻转二叉树

  • 题目链接:226.翻转二叉树
  • 思路:遍历二叉树,遍历的时候交换左右节点即可
  • 代码:
TreeNode* invertTree(TreeNode* root) {reverse(root);return root;}// 迭代法,层序遍历void f2(TreeNode* root) {queue<TreeNode*> que;if (root != NULL) que.push(root);while (!que.empty()) {int size = que.size();for (int i = 0; i < size; i++) {TreeNode* node = que.front();que.pop();swap(node->left, node->right); // 节点处理if (node->left) que.push(node->left);if (node->right) que.push(node->right);}}return root;}// 递归法void reverse(TreeNode* root) {if(!root)return;TreeNode* l = root->left;TreeNode* r = root->right;reverse(l);reverse(r);root->left = r;root->right = l;}

101. 对称二叉树

  • 题目链接:101. 对称二叉树
  • 思路:遍历的时候,分别遍历比较左子树的右子树,和右子树的做子树,左子树的左子树和右子树的右子树对应即可
  • 代码:
/*** 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:// 递归法bool isEqual(TreeNode* right, TreeNode* left) {if(!right || !left)return right == left;return right->val == left->val && isEqual(right->left, left->right) && isEqual(right->right, left->left);}// 迭代法bool isEqualIter(TreeNode* u, TreeNode* v) {queue <TreeNode*> q;q.push(u); q.push(v);while (!q.empty()) {u = q.front(); q.pop();v = q.front(); q.pop();if (!u && !v) continue;if ((!u || !v) || (u->val != v->val)) return false;q.push(u->left); q.push(v->right);q.push(u->right); q.push(v->left);}return true;}bool isSymmetric(TreeNode* root) {if(!root)return true;return isEqualIter(root->left, root->right);}
};

104.二叉树的最大深度

  • 题目链接:104.二叉树的最大深度
  • 思路:遍历二叉树,记录最大深度即可
  • 代码:
class Solution {
public:// 递归法int maxRecur(TreeNode* root) {if (root == nullptr) {return 0;}int l_depth = maxDepth(root->left);int r_depth = maxDepth(root->right);return max(l_depth, r_depth) + 1;}// 迭代法,层序遍历int maxIter(TreeNode* root) {if (root == nullptr) return 0;queue<TreeNode*> Q;Q.push(root);int ans = 0;while (!Q.empty()) {int sz = Q.size();while (sz > 0) {TreeNode* node = Q.front();Q.pop();if (node->left) Q.push(node->left);if (node->right) Q.push(node->right);sz -= 1;}ans += 1;} return ans;}int maxDepth(TreeNode* root) {return maxRecur(root);}
};

111.二叉树的最小深度

  • 题目链接:111.二叉树的最小深度
  • 思路:遍历二叉树记录最小深度,相比最大深度,这里记录最小深度时,需要记录的是到叶子节点的最小深度,需要比最大深度多两个判断
  • 代码:
class Solution {
public:// 递归法int minDepthRecur(TreeNode *root) {if (root == nullptr) {return 0;}if (root->right == nullptr) {return minDepthRecur(root->left) + 1; // 左子树的最小高度}if (root->left == nullptr) {return minDepthRecur(root->right) + 1; // 右子树的最小高度}return min(minDepthRecur(root->left), minDepthRecur(root->right)) + 1;}// 迭代法,层序遍历int minDepthIter(TreeNode *root) {if (root == nullptr) return 0;queue<pair<TreeNode *, int> > que; // 记录节点和深度que.emplace(root, 1);while (!que.empty()) {TreeNode *node = que.front().first;int depth = que.front().second;que.pop();if (node->left == nullptr && node->right == nullptr) {return depth; // 没有子树,叶子节点,最先到达的叶子节点的高度为最小深度}if (node->left != nullptr) {que.emplace(node->left, depth + 1); // 左子树的深度}if (node->right != nullptr) { // 右子树的深度que.emplace(node->right, depth + 1);}}return 0;}int minDepth(TreeNode *root) {return minDepthRecur(root);}
};

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

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

相关文章

易友BOM管理软件

易友BOM管理软件介绍 易友BOM管理软件是一款功能齐全、操作简便、安全可靠的BOM管理系统。它为企业提供了多方面的BOM管理解决方案&#xff0c;帮助企业提高生产效率、降低成本、增强灵活性并提升竞争力。制造企业&#xff0c;都可以通过易友BOM管理软件来实现BOM管理的优化和…

安全见闻-二进制与网络安全的关系

一、二进制的基本概念 二、二进制在网络安全中的重要性 三、二进制安全的概念与范畴 1. 二进制安全的定义 2. 范畴 四、二进制安全的渗透测试方法 1. 静态分析 2. 动态分析 3. 模糊测试 4. 漏洞利用 5. 代码审计 五、结论 学习视频泷羽sec&#xff1a;安全见闻&…

git 怎么保留某个文件夹忽略其下面的所有文件?

在 Git 中&#xff0c;如果你想要保留某个文件夹&#xff08;比如 folder/&#xff09;但忽略其下面的所有文件&#xff0c;可以使用 .gitignore 文件来实现。需要注意的是&#xff0c;Git 不会自动创建空目录。因此&#xff0c;为了让 Git 记录这个空目录&#xff0c;你需要在…

【模型学习之路】手写+分析bert

手写分析bert 目录 前言 架构 embeddings Bertmodel 预训练任务 MLM NSP Bert 后话 netron可视化 code2flow可视化 fine tuning 前言 Attention is all you need! 读本文前&#xff0c;建议至少看懂【模型学习之路】手写分析Transformer-CSDN博客。 毕竟Bert是tr…

不用求人,4个方法快速恢复小米手机删除短信

手机短信作为我们日常办理事情的重要验收通道&#xff0c;往往承载着许多重要的信息。然而&#xff0c;由于各种原因&#xff0c;我们可能会不小心删除了重要的短信。那么&#xff0c;小米手机用户如何恢复这些被删除的短信呢&#xff1f;接下来&#xff0c;我们将分点为您详细…

爆肝整理14天AI工具宝藏合集(三)

&#x1f6e0;️以下是我为大家整理的AI工具宝藏合集&#xff08;三&#xff09;&#xff1a; &#x1f4a1;AI搜索 1️⃣ 天工AI搜索 2️⃣ 秘塔AI搜索 3️⃣ 夸克AI搜索 4️⃣ 开搜AI搜索 &#x1f4a1; AI视频 1️⃣ 可灵AI 2️⃣ 即梦AI 3️⃣ Vidu 4️⃣ Stable Video …

vue版本太低无法执行vue ui命令

连接 ui和create目前都只支持3.0以后得版本才能使用 https://blog.csdn.net/m0_67318913/article/details/136775252?utm_mediumdistribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-0-136775252-blog-121204604.235v43pc_blog_bottom_relevance…

ETL集成工具丨如何运用ETLCloud单步调试断点功能

在现代数据处理领域&#xff0c;ETLCloud 的单步调试断点功能正成为数据管理的重要工具。ETLCloud 是一个强大的云端数据处理平台&#xff0c;它提供了灵活的单步调试功能&#xff0c;使得用户能够逐步跟踪和分析数据处理流程。本文将探讨如何运用 ETLCloud 的单步调试断点功能…

python 模块和包、类和对象

模块 模块是包含 Python 代码的文件&#xff0c;通常用于组织相关的函数、类和其他语句。模块可以被导入并在其他 Python 文件中使用。 创建模块 假设你创建了一个名为 mymodule.py 的文件&#xff0c;内容如下&#xff1a; # mymodule.pydef greet(name): return f"…

通信原理概论复习笔记(2):模拟调制与数字调制

5 模拟调制系统 调制: 将消息信号搭载(边带)到载波参数上(调幅; 调频; 调相); 边带滤波器 h ( t ) ↔ H ( ω ) h(t)\leftrightarrow H(\omega) h(t)↔H(ω). 载波: 高频周期性震荡信号; c ( t ) A cos ⁡ ( ω c t φ ) c(t)A\cos(\omega_c t\varphi) c(t)Acos(ωc​tφ)…

Linux系统用户操作以及权限管理

用户账号 用户账号&#xff1a;linux系统当中用户的角色&#xff0c;以及用户所拥有的权限 超级管理员&#xff1a;root roottest1&#xff1a;~# 命令含义root表示当前的登录用户test1当前主机名~当前目录#表示当前用户时管理员$表示当前用户是普通用户 exit&#xff1a;…

全新更新!Fastreport.NET 2025.1版本发布,提升报告开发体验

在.NET 2025.1版本中&#xff0c;我们带来了巨大的期待功能&#xff0c;进一步简化了报告模板的开发过程。新功能包括通过添加链接报告页面、异步报告准备、HTML段落旋转、代码文本编辑器中的文本搜索、WebReport图像导出等&#xff0c;大幅提升用户体验。 FastReport .NET 是…

Unity(四十八):Unity与Web双向交互

效果 游戏对象绑定脚本 游戏脚本源码 using System.Collections; using System.Collections.Generic; using UnityEngine;public class Tent : MonoBehaviour {public Camera camera;// Start is called before the first frame updatevoid Start(){}// Update is called once…

Docker:容器化和虚拟化

虚拟化 虚拟化是一种资源管理技术&#xff0c;它将计算机的各种实体资源&#xff08;如CPU、内存、磁盘空间、网络适配器等&#xff09;予以抽象、转换后呈现出来&#xff0c;并可供分割、组合为一个或多个电脑配置环境。这些资源的新虚拟部分是不受现有资源的架设方式、地域或…

【果蔬识别】Python+卷积神经网络算法+深度学习+人工智能+机器学习+TensorFlow+计算机课设项目+算法模型

一、介绍 果蔬识别系统&#xff0c;本系统使用Python作为主要开发语言&#xff0c;通过收集了12种常见的水果和蔬菜&#xff08;‘土豆’, ‘圣女果’, ‘大白菜’, ‘大葱’, ‘梨’, ‘胡萝卜’, ‘芒果’, ‘苹果’, ‘西红柿’, ‘韭菜’, ‘香蕉’, ‘黄瓜’&#xff09;…

mybatis数据映射(记录踩坑点)

刚开始&#xff0c;userInfo里面的id我默认以为是User表的id&#xff0c;但是后面稍微看了一下返回的数据&#xff0c;userId跟replyId一致&#xff0c;我就知道userInfo里的id指的是Reply的id&#xff08;应该是命名冲突&#xff0c;先查Reply有没有id&#xff0c;没有&#x…

【C++笔记】内存管理

前言 各位读者朋友们大家好&#xff0c;上期我们讲了类和对象下的内容&#xff0c;类和对象整体的内容我们就讲完了&#xff0c;接下来我们开启新的部分内存管理的讲解。 目录 前言一. C/C内存分布二. C语言中内存管理的方式三. C内存管理方式3.1 new/delete操作内置类型3.2…

《计算机原理与系统结构》学习系列——处理器(中)

系列文章目录 目录 流水线数据通路与控制概述5个流水级指令周期与流水级 流水线性能流水线时钟周期的长度T和数量cycles流水线性能 流水线数据通路流水线寄存器流水线分析图形化流水线流水线控制 流水线数据通路与控制 概述 5个流水级 指令周期与流水级 单周期实现中&#x…

鸿蒙网络编程系列40-TLS数字证书查看及验签示例

1. TLS数字证书验签简介 数字证书的验签是网络编程中一个重要的功能&#xff0c;它保证了数字证书的真实性&#xff0c;在此基础上&#xff0c;我们才可以信任该证书&#xff0c;从而信任基于该证书建立的安全通道&#xff0c;所以说&#xff0c;数字证书的验签是通讯安全的基…

路虎裁员,又玩出了新花样。。

大家好&#xff0c;我是程序员面试刷题平台的鸭鸭&#xff01; 最近裁员的新闻已经不少见了&#xff0c;但鸭鸭没想到&#xff0c;公司裁员的花样真是越来越多了。 最近流言中裁员比例超过 50% 的捷豹路虎&#xff0c;听说就专门为裁员开辟了一个快速离职专区&#xff1a;前一…