代码随想录算法训练营43期 | Day 14——226.翻转二叉树、101. 对称二叉树、104.二叉树的最大深度、二叉树最小深度

代码随想录算法训练营

  • 226.翻转二叉树
  • 101. 对称二叉树
    • 递归法
  • 104.二叉树的最大深度
  • 二叉树最小深度

226.翻转二叉树

leetcode链接
在这里插入图片描述

思路:
递归三部曲:

  1. 确定递归函数的参数和返回值
  2. 确定终止条件
  3. 确定单层递归的逻辑

递归法

TreeNode* invertTreeNode(TreeNode* root)
{if(root==nullptr) return root;swap(root->left,root->right);invertTreeNode(root->left);invertTreeNode(root->right);return root;
}

迭代法(深度优先遍历)

 TreeNode* invertTree(TreeNode* root) {//迭代法 深度优先遍历stack<TreeNode*> st;//判断根节点是否为nullif(root==nullptr) return root;//根节点入栈st.push(root);//循环终止条件 栈为空while(!st.empty()){//中TreeNode* node = st.top();//出栈st.pop();//左节点入栈if(node->right) st.push(node->right); //左 if(node->left) st.push(node->left);    //右swap(node->left, node->right);          //交换}return root;}

层序遍历(广度优先遍历)

class Solution {
public:TreeNode* invertTree(TreeNode* root) {//广度优先遍历//创建队列queue<TreeNode*> que;if(root!=nullptr) //入队que.push(root);//循环终止条件 que为空while(!que.empty()){//size 保存队列中元素个数,需要弹出的元素个数int size = que.size();//遍历for(int i = 0;i<size;i++){TreeNode* node = que.front();//取出对头元素, node指向对头元素//出队que.pop();//交换节点swap(node->left,node->right);if(node->left) que.push(node->left);if(node->right) que.push(node->right);}}//循环结束 返回rootreturn root;}
};

101. 对称二叉树

leetcode链接
在这里插入图片描述

递归法

递归三部曲:

  1. 确定递归函数的返回值和参数
    参数自然也是左子树节点和右子树节点,返回值为bool类型
```c++
bool compareTree(TreeNode* left, TreeNode* right){
}
```
  1. 确定递归函数的终止条件
    节点为空的情况有:
  • 左节点为空,右节点不为空,不对称,return false
  • 左不为空,右为空,不对称 return false
  • 左右都为空,对称,返回true
    此时已经排除掉了节点为空的情况,那么剩下的就是左右节点不为空:
  • 左节点数值!=右节点数值,返回false
    左右都不为空,比较节点数值,不相同就return false
if (left == NULL && right != NULL) return false;
else if (left != NULL && right == NULL) return false;
else if (left == NULL && right == NULL) return true;
else if (left->val != right->val) return false; // 注意这里我没有使用else
  1. 确定单层函数递归逻辑
    左右节点都不为空,且数值相同的情况
  • 比较二叉树外侧是否对称:传入的是左节点的左孩子,右节点的右孩子。
  • 比较内侧是否对称,传入左节点的右孩子,右节点的左孩子。
  • 如果左右都对称就返回true ,有一侧不对称就返回false 。
bool outside = compareTree(left->left, right->right);
bool inside = compareTree(left->right, right->left);
bool isSame = outside && inside; 
return isSame ;

完整代码

class Solution {
public:bool compareTree(TreeNode* left, TreeNode* right){if (left == NULL && right != NULL) return false;else if (left != NULL && right == NULL) return false;else if (left == NULL && right == NULL) return true;else if (left->val != right->val) return false; // 注意这里我没有使用else//都不为空,数值相同的情况bool outside  = compareTree(left->left, right->right);bool inside = compareTree(left->right, right->left);bool isSame = outside&&inside;return isSame;}bool isSymmetric(TreeNode* root) {if(root==nullptr) return true;bool result = compareTree(root->left, root->right);return result;}
};

104.二叉树的最大深度

class Solution {
public:// 从根节点遍历,遍历左子树,遍历右子树//1. 确定递归函数参数和返回值int getLength(TreeNode* node){if(node==nullptr) return 0;int leftdepth = getLength(node->left);int rightdepth = getLength(node->right);int depth = 1 + max(leftdepth, rightdepth);return depth;}int maxDepth(TreeNode* root) {int result = getLength(root);return result;}
};

二叉树最小深度

在这里插入图片描述

class Solution {
public:int getDepth(TreeNode* node) {if (node == NULL) return 0;int leftDepth = getDepth(node->left);           // 左int rightDepth = getDepth(node->right);         // 右// 中// 当一个左子树为空,右不为空,这时并不是最低点if (node->left == NULL && node->right != NULL) { return 1 + rightDepth;}   // 当一个右子树为空,左不为空,这时并不是最低点if (node->left != NULL && node->right == NULL) { return 1 + leftDepth;}int result = 1 + min(leftDepth, rightDepth);return result;}int minDepth(TreeNode* root) {return getDepth(root);}
};

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

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

相关文章

并发系统的 CSP+PAT 形式化建模与验证方法(以Kafka系统为例)

消息队列中间件是分布式系统的重要组成部分。它允许应用程序仅关注数据本身&#xff0c;而无需关心数据传输的具体细节。这一特性有效解决了消息异步传输、应用程序解耦以及流量削峰等问题。Kafka是一个开源的分布式消息系统&#xff0c;它基于发布-订阅模型构建。Kafka具有低延…

Unity使用代码生成ScriptableObject数据并赋值之后,重启数据就没有啦!

2024年8月14日早&#xff0c;因数据持续化存储&#xff0c;重启电脑后数据会丢失&#xff0c;而我找不到原因被领导质疑了&#xff0c;故写一片博客记录这个错误。 省流 使用在编辑器的play模式中为ScriptableObject赋值之后&#xff0c;需要使用 #if UNITY_EDITORUnityEdit…

Codeforces Round 495 (Div. 2) F. Sonya and Bitwise OR(线段树)

原题链接&#xff1a;F. Sonya and Bitwise OR 题目大意&#xff1a; 给出一个长度为 n n n 的数组 a a a&#xff0c;并给出 m m m 次询问以及一个数字 x x x。 每个询问形式如下给出&#xff1a; 1 1 1 i i i y y y &#xff1a;将 a i a_{i} ai​ 位置的值更改为 y…

数据库分库分表的介绍

为什么要分库分表 把存于一个库的数据分散到多个库中&#xff0c;把存于一个表的数据分散到多个表中。如果说读写分离是为了分散数据库读写操作压力&#xff0c;分库分表就是为了分散存储压力&#xff0c;一般情况下&#xff0c;单表数据量到达千万级别&#xff0c;就可以考虑…

基于飞腾平台的Hbase的安装配置

【写在前面】 飞腾开发者平台是基于飞腾自身强大的技术基础和开放能力&#xff0c;聚合行业内优秀资源而打造的。该平台覆盖了操作系统、算法、数据库、安全、平台工具、虚拟化、存储、网络、固件等多个前沿技术领域&#xff0c;包含了应用使能套件、软件仓库、软件支持、软件适…

支持S/MIME证书的邮件客户端有哪些?

S/MIME证书&#xff0c;也叫做邮件安全证书&#xff0c;支持安全/多用途互联网邮件扩展协议&#xff08;S/MIME协议&#xff09;&#xff0c;是通过加密和数字签名来确保电子邮件的安全性、保密性和完整性的数字证书。GDPR、HIPAA、FDA等多个行业都要求邮件发送方在发送邮件时对…

基于R语言遥感随机森林建模与空间预测;遥感数据处理与特征提取;数据分析与可视化

目录 第一章 理论基础与数据准备【夯实基础】 第二章 随机森林建模与预测【讲解实践】 第三章 实践案例与项目 更多应用 随机森林作为一种集成学习方法&#xff0c;在处理复杂数据分析任务中特别是遥感数据分析中表现出色。通过构建大量的决策树并引入随机性&#xff0c;随…

C++ 特殊类设计以及单例模式

目录 1 不能被拷贝 2 只能在堆上创建对象 3 只能在栈上创建对象 4 禁止在堆上创建对象 5 不能被继承的类 6 单例类 特殊类就是一些有特殊需求的类。 1 不能被拷贝 要设计一个防拷贝的类&#xff0c;C98之前我们只需要将拷贝构造以及拷贝赋值设为私有&#xff0c;同时只声明…

RTX 4070 GDDR6显存曝光:性能与成本的平衡之选

近期&#xff0c;关于NVIDIA RTX 4070新显卡的信息曝光&#xff0c;这款显卡将配备较为缓慢的GDDR6显存&#xff0c;而非更高性能的GDDR6X。这一配置的选择引发了业内的广泛关注&#xff0c;特别是在性能与成本的平衡问题上。 新版RTX 4070 OC 2X的核心特点 **1.显存类型与带…

8B 端侧小模型 | 能力全面对标GPT-4V!单图、多图、视频理解端侧三冠王,这个国产AI开源项目火爆全网

这两天&#xff0c; Github上一个 国产开源AI 项目杀疯了&#xff01;一开源就登上了 Github Trending 榜前列&#xff0c;一天就获得将近600 star。 这个项目就是国内大模型四小龙之一面壁智能最新大打造的面壁「小钢炮」 MiniCPM-V 2.6 。它再次刷新端侧多模态天花板&#xf…

微分方程求解的三种解析方法:经典时域法(齐次解+特解,零状态+零输入),冲激响应卷积法、传递函数法

经典时域分析方法 以例题的形式对经典时域解法&#xff08;齐次解特解&#xff09;进行说明&#xff0c;最后进行总结。考虑如下形式微分方程&#xff1a; y ′ ′ ( t ) 5 y ′ ( t ) 6 y ( t ) 2 f ′ ( t ) 6 f ( t ) y\left( t \right) 5y\left( t \right) 6y\left(…

pyinstaller使用

pyinstaller 入门 Pyat5 的安装程序开发PyQt6 的安装程序开发 编写好的程序编译成可执行文件资源文件:用 zip 打包&#xff0c;基本可以压缩到 1/3 大小;然后再用 pyqt 写一个 setup 安装程序&#xff0c;安装到指定目录(安装的过程实际就是把文件解压、拷贝到指定目录、注册到…

[000-01-030].第2节 :Zookeeper本地安装

1.Zookeeper下载地址 1.Zookeeper官网地址 2.会显示Zookeeper的一些版本 2.Zookeeper本地模式安装&#xff1a; 2.1.Zookeeper安装前准备 1.在Centos7虚拟机中安装jdk8 2.2.Zookeeper安装过程&#xff1a; 1.下载zookeeper压缩版本&#xff0c;解压放在opt/moduel目录下…

虚拟人实时主持创意互动方案:赋能峰会论坛会议等活动科技互动感

随着增强现实、虚拟现实等技术的不断发展&#xff0c;“虚拟人实时主持”创意互动模式逐渐代替传统单一真人主持模式&#xff0c;虚拟主持人可以随时随地出现在不同活动现场&#xff0c;也可以同一时间在不同分会场中担任主持工作&#xff0c;在峰会、论坛、会议、晚会、发布会…

计算机网络三级笔记--原创 风远 恒风远博

典型设备中间设备数据单元网络协议物理层中继器、集线器中继器、集线器数据位(bit) binary digit二进 制数据的缩写HUB使用了光纤、 同轴电缆、双绞 线.数据链路层网卡、网桥、交换机网桥、交换机数据帧(Frame)STP、ARQ、 SW、CSMA/CD、 PPP(点对点)、 HDLC、ATM网络层路由器、…

MySQL 管理

启动及关闭 MySQL 服务器 Windows 系统下 启动 MySQL 服务器&#xff1a; 1、通过 “服务” 管理工具&#xff1a; 打开“运行”对话框&#xff08;Win R&#xff09;&#xff0c;输入 services.msc&#xff0c;找到“MySQL”服务&#xff0c;右击选择“启动”。 2、通过命…

汇量科技Mintegral发布全新产品矩阵:助力广告主高效增长与变现

近期&#xff0c;汇量科技旗下程序化互动式广告平台Mintegral正式推出全新产品命名&#xff0c;期望通过简洁明确的产品名称&#xff0c;更好地传达Mintegral的品牌理念&#xff0c;使客户与平台的每一次接触都更加直接高效。 Mintegral AppGrowth(原Mintegral Self-Service Pl…

QLabel设置图像的方法+绘制文本换行显示

1、QLabel设置图像有两种方法 (1) void setPicture(const QPicture &); (2) void setPixmap(const QPixmap &); QPicture和QPixmap都是继承于QPaintDevice&#xff0c;它们都可以通过加载图片的方式获取&#xff1a;bool load(QIODevice *dev, const char *format …

【直播预告】智能机器人赛道技术培训定档8.20

在不远的将来&#xff0c;机器人可能会成为我们日常生活中不可或缺的伙伴&#xff0c;它们在工业生产线上精准操作&#xff0c;在家庭中提供温馨陪伴&#xff0c;甚至在探索未知领域中担当先锋。而现在&#xff0c;正是我们拥抱这一未来&#xff0c;深入了解并掌握智能机器人技…

【Python机器学习】树回归——树剪枝

如果一棵树节点过多&#xff0c;表明该模型可能对数据进行了过拟合。 通过降低决策树的复杂度来避免过拟合的过程称为剪枝。提过提前终止条件&#xff0c;实际上就是在进行一种所谓的预剪枝&#xff1b;另一种形式的剪枝需要使用测试集和训练集&#xff0c;称作后剪枝。 预剪…