代码随想录算法训练营二刷第8天 | 二叉树的对称以及深度

2024-04-29 23:04

本文主要是介绍代码随想录算法训练营二刷第8天 | 二叉树的对称以及深度,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

对称二叉树

  1. 这道题需要用两个指针分别从根节点的左、右两个方向去判断是否对称,一旦有遇到不对称的即为 非对称二叉树
  2. 可以用层序遍历,将每一层的节点收集到一个vector数组中并用双指针法判断其是否对称;可以用递归的方法,相当于判断根节点的左右两个子树是否是可以相互翻转的。
  3. 对称二叉树的处理内容就是判断,判断根节点的左右两个子树时候是可以相互翻转的,也就是 判断某个节点能否与另一个节点对称;
  4. 对于递归的方法而言,由于判断的逻辑是:必须先判断根节点的左右两个子树是否可以翻转,才能判断出以根节点为跟的树是否是对称的,那么就有点自下而上的意思了,因此只能后序遍历

二叉树的最大深度

方法一:层序遍历,很好做,只要统计二叉树遍历的层数即可得到最大深度。

方法二:深度优先即递归法,通常,求高度用后序遍历;求深度用的是前序遍历。

1、首先可采用层序遍历,而且思路很简单

2、其次要 明确二叉树的深度,是指每个节点到根节点的节点数量。二叉树的最大深度就是最低一层的叶子节点到跟节点的节点数量。最大深度的本质其实就是:从所有的叶子节点出发,往根节点的方向搜索,其中经过节点数量最大的就是最大深度!因此用递归也可以,由于是从叶子节点向根节点层层返回高度!所以说只能用后序遍历!

class Solution {
public:int maxDepth(TreeNode* root) {//首先可采用层序遍历,而且思路很简单//首先明确二叉树的深度,是指每个节点到根节点的节点数量//二叉树的最大深度就是最低一层的叶子节点到跟节点的节点数量//最大深度的本质其实就是:从所有的叶子节点出发,往根节点的方向搜索//其中节点数量最大的就是最大深度!//用递归也可以,由于是从叶子节点向根节点层层返回高度!因此只能用后序//递归方法中每层返回到就是一个数值,表示从叶子节点到当前节点已经经过的节点数量!//因此递归返回值类型为int型,参数为根节点if (root == nullptr) return 0;int leftDepth = maxDepth(root->left);int rightDepth = maxDepth(root->right);int res = max(leftDepth, rightDepth) + 1;return res;}
};

二叉树的最小深度

方法一:层序遍历,很好做,遇到左右孩子均为空的情况就返回层数即可。

方法二:深度优先递归法,求二叉树的最小深度和求二叉树的最大深度的差别主要在于处理左右孩子不为空的逻辑。

此处总结以下递归的思想:

以上面两题为例,对根节点而言,求最小深度就是要求最小的高度,要 求根节点的最大/最小高度,就要求左右子树的最大/最小高度,得到左右子树的最大/最小高度以后 + 1;然后要 求左子树的根节点的最大/最小高度,······,最终递归到了叶子节点:要得到叶子节点的高度就返回以叶子节点为根节点的树的最大/最小高度,因此终止条件就是遇到空节点时将返回0,然后在上一层+1;想明白这个处理逻辑以后,按照单层递归的逻辑去思考写好代码,其实程序就是会按着一层一层的去遍历。

这篇关于代码随想录算法训练营二刷第8天 | 二叉树的对称以及深度的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/947390

相关文章

python使用Akshare与Streamlit实现股票估值分析教程(图文代码)

《python使用Akshare与Streamlit实现股票估值分析教程(图文代码)》入职测试中的一道题,要求:从Akshare下载某一个股票近十年的财务报表包括,资产负债表,利润表,现金流量表,保存... 目录一、前言二、核心知识点梳理1、Akshare数据获取2、Pandas数据处理3、Matplotl

Django开发时如何避免频繁发送短信验证码(python图文代码)

《Django开发时如何避免频繁发送短信验证码(python图文代码)》Django开发时,为防止频繁发送验证码,后端需用Redis限制请求频率,结合管道技术提升效率,通过生产者消费者模式解耦业务逻辑... 目录避免频繁发送 验证码1. www.chinasem.cn避免频繁发送 验证码逻辑分析2. 避免频繁

精选20个好玩又实用的的Python实战项目(有图文代码)

《精选20个好玩又实用的的Python实战项目(有图文代码)》文章介绍了20个实用Python项目,涵盖游戏开发、工具应用、图像处理、机器学习等,使用Tkinter、PIL、OpenCV、Kivy等库... 目录① 猜字游戏② 闹钟③ 骰子模拟器④ 二维码⑤ 语言检测⑥ 加密和解密⑦ URL缩短⑧ 音乐播放

Python使用Tenacity一行代码实现自动重试详解

《Python使用Tenacity一行代码实现自动重试详解》tenacity是一个专为Python设计的通用重试库,它的核心理念就是用简单、清晰的方式,为任何可能失败的操作添加重试能力,下面我们就来看... 目录一切始于一个简单的 API 调用Tenacity 入门:一行代码实现优雅重试精细控制:让重试按我

深度解析Spring Security 中的 SecurityFilterChain核心功能

《深度解析SpringSecurity中的SecurityFilterChain核心功能》SecurityFilterChain通过组件化配置、类型安全路径匹配、多链协同三大特性,重构了Spri... 目录Spring Security 中的SecurityFilterChain深度解析一、Security

深度解析Nginx日志分析与499状态码问题解决

《深度解析Nginx日志分析与499状态码问题解决》在Web服务器运维和性能优化过程中,Nginx日志是排查问题的重要依据,本文将围绕Nginx日志分析、499状态码的成因、排查方法及解决方案展开讨论... 目录前言1. Nginx日志基础1.1 Nginx日志存放位置1.2 Nginx日志格式2. 499

Python实现MQTT通信的示例代码

《Python实现MQTT通信的示例代码》本文主要介绍了Python实现MQTT通信的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 安装paho-mqtt库‌2. 搭建MQTT代理服务器(Broker)‌‌3. pytho

MySQL进行数据库审计的详细步骤和示例代码

《MySQL进行数据库审计的详细步骤和示例代码》数据库审计通过触发器、内置功能及第三方工具记录和监控数据库活动,确保安全、完整与合规,Java代码实现自动化日志记录,整合分析系统提升监控效率,本文给大... 目录一、数据库审计的基本概念二、使用触发器进行数据库审计1. 创建审计表2. 创建触发器三、Java

深度解析Java DTO(最新推荐)

《深度解析JavaDTO(最新推荐)》DTO(DataTransferObject)是一种用于在不同层(如Controller层、Service层)之间传输数据的对象设计模式,其核心目的是封装数据,... 目录一、什么是DTO?DTO的核心特点:二、为什么需要DTO?(对比Entity)三、实际应用场景解析

深度解析Java项目中包和包之间的联系

《深度解析Java项目中包和包之间的联系》文章浏览阅读850次,点赞13次,收藏8次。本文详细介绍了Java分层架构中的几个关键包:DTO、Controller、Service和Mapper。_jav... 目录前言一、各大包1.DTO1.1、DTO的核心用途1.2. DTO与实体类(Entity)的区别1