代码随想录算法训练营day19 | 104.二叉树的最大深度、111.二叉树的最小深度、222.完全二叉树的节点个数

news/2024/5/20 23:10:18

104.二叉树的最大深度

本题可以使用前序(中左右),也可以使用后序遍历(左右中),使用前序求的就是深度,使用后序求的是高度。

  • 二叉树节点的深度:指从根节点到该节点的最长简单路径边的条数或者节点数(取决于深度从0开始还是从1开始)
  • 二叉树节点的高度:指从该节点到叶子节点的最长简单路径边的条数或者节点数(取决于高度从0开始还是从1开始)

根节点的高度就是二叉树的最大深度,所以本题可以通过后序求根节点高度来求的二叉树最大深度。

前序遍历,求深度

result作为参数时无法传递回来,必须将result作为一个全局变量

class Solution:def __init__(self):self.result = 0def maxDepth(self, root: Optional[TreeNode]) -> int:self.depth(root, 0)return self.resultdef depth(self, cur, depth):if not cur:returnself.result = max(self.result, depth + 1)self.depth(cur.left, depth + 1)self.depth(cur.right, depth + 1)

后序遍历,求根节点的高度

class Solution:def maxDepth(self, root: Optional[TreeNode]) -> int:if not root:return 0left_depth = self.maxDepth(root.left)right_depth = self.maxDepth(root.right)return max(left_depth, right_depth) + 1

111.二叉树的最小深度

最小深度是从根节点到最近叶子节点的最短路径上的节点数量。注意是叶子节点。

使用后序遍历,其实求的是根节点到叶子节点的最小距离,就是求高度的过程,不过这个最小距离 也同样是最小深度。

class Solution:def minDepth(self, root: Optional[TreeNode]) -> int:if not root:return 0left_depth = self.minDepth(root.left)right_depth = self.minDepth(root.right)# 针对非叶子节点进行限制if not root.left and root.right:return 1 + right_depthif not root.right and root.left:return 1 + left_depthreturn 1 + min(left_depth, right_depth)

222.完全二叉树的节点个数

遍历完全二叉树一次即可以求出节点个数

class Solution:def countNodes(self, root: Optional[TreeNode]) -> int:if not root:return 0return 1 + self.countNodes(root.left) + self.countNodes(root.right)

但是完全二叉树有自己的特性,可以将完全二叉树划分为小的满二叉树,当是小的满二叉树时,可以利用公式

class Solution:def countNodes(self, root: Optional[TreeNode]) -> int:if not root:return 0left = root.leftright = root.rightleft_depth = 0right_depth = 0while left:left = left.leftleft_depth += 1while right:right = right.rightright_depth += 1if left_depth == right_depth:# return 2 ** (left_depth+1) - 1return (2 << left_depth) - 1return self.countNodes(root.left) + self.countNodes(root.right) + 1


http://www.mrgr.cn/p/68345342

相关文章

基于FPGA的去雾算法

去雾算法的原理是基于图像去模糊的原理&#xff0c;通过对图像中的散射光进行估计和去除来消除图像中的雾霾效果。 去雾算法通常分为以下几个步骤&#xff1a; 1. 导引滤波&#xff1a;首先使用导引滤波器对图像进行滤波&#xff0c;目的是估计图像中散射光的强度。导引滤波器…

json在线解析及格式化工具

JSON 可以将程序语言对象中表示的一组数据转换为字符串,然后就可以在网络或者程序之间轻松地传递这个字符串,并在需要的时候将它还原为各编程语言所支持的数据格式,例如在 PHP 中,可以将 JSON还原为数组或者一个基本对象。在用到AJAX时,如果需要用到数组传值,这时就需要用…

Docker 桥接模式下端口映射会绕过防火墙

问题描述 使用Docker桥接模式启动了一个MySQL容器 查看防火墙发现并未开启3306端口,但该宿主机3306端口仍能被第三方机器访问telnet 152.51.32.11 3306 问题本质 Docker 在进行端口映射时,已经自动使用iptables命令修改了防火墙规则;并且这个规则不会被ufw显示、管理;甚至…

什么是Facebook付费广告营销?

Facebook作为全球最大的社交平台之一&#xff0c;成为了跨境卖家不可或缺的营销阵地。它不仅拥有庞大的用户基数&#xff0c;还提供了丰富的广告工具和社群互动功能&#xff0c;让商家能够精准触达目标市场&#xff0c;提升品牌影响力。云衔科技通过Facebook付费广告营销的专业…

ElementUI——elementui重复引入样式

前言 按着文档操作后发现存在样式重复引入的问题,尝试了一系列的配置都未生效,最终是直接生成样式导入解决; 文档:https://element.eleme.io/#/zh-CN/component/custom-theme#yin-ru-zi-ding-yi-zhu-ti 工具:https://elementui.github.io/theme-chalk-preview/#/zh-CN 内容…

【元对象系统概述】

元对象系统概述 &#x1f31f; 元对象&#x1f31f; 元对象系统&#x1f31f; QT官方文档中给出的定义&#x1f31f;《Qt5.9 C开发指南》中给出的定义 &#x1f31f; 元对象 元对象是一个描述类的信息的数据结构&#xff0c;在qt中常常与QObject的类相关联。 可以通过QObject::…

LeetCode 404.左叶子之和

LeetCode 404.左叶子之和 1、题目 题目链接&#xff1a;404. 左叶子之和 给定二叉树的根节点 root &#xff0c;返回所有左叶子之和。 示例 1&#xff1a; 输入: root [3,9,20,null,null,15,7] 输出: 24 解释: 在这个二叉树中&#xff0c;有两个左叶子&#xff0c;分别…

通过Dockerfile创建海量数据库VastbaseG100的docker镜像

1.Dockerfile文件内容 FROM centos:centos8LABEL maintainer="xh"COPY Vastbase-G100-installer-2.2_Build15\(17408\)-kylin_v10sp2-x86_64-no_mot-20231221.tar.gz /opt COPY db_install.rsp /opt COPY docker-entrypoint.sh /optRUN set -x \&& cd /etc/y…

专题六_模拟(2)

目录 6. Z 字形变换 解析 题解 38. 外观数列 解析 题解 6. Z 字形变换 6. Z 字形变换 - 力扣&#xff08;LeetCode&#xff09; 解析 题解 class Solution { public:string convert(string s, int numRows) {// 42.专题六_模拟_N 字形变换_C// 处理边界情况if (numRows …

水泽信息收集docker安装

具体参考水泽 Docker安装 点击跳转镜像源 1. vim /etc/docker/daemon.json //对镜像源进行配置 2. 对包进行更新 如果没有进行sudo su的话 就得sudo apt update3. 安装docker apt install docker.io #常见命令 sudo systemctl start docker sudo systemctl enable docker…

分享一个好用的网页分析工具

分析一个很好用的分析工具,网页信息检测查询,可以快速检测网页的META标签,分析标题、关键词、描述等是否符合搜索引擎。 工具地址:http://tools.linuxsou.com/chameta/ 比如我检测博客园,看下图: 千行代码,Bug何处藏。 纵使上线又怎样,朝令改,夕断肠。

ArcGIS如何计算地级市间的距离

一、数据准备 加载配套实验数据包中的地级市和行政区划矢量数据(订阅专栏后,从私信查收数据),如下图所示: 二、计算距离 1. 计算邻近表 ArcGIS提供了计算点和另外点之间距离的工具:分析工具→邻域分析→生成临近表。 计算一个或多个要素类或图层中的要素间距离和其他邻…

SD 总线协议

官方资料参考: https://www.sdcard.org/downloads/pls/

振弦采集仪在岩土工程监测中的性能评价及标准选择

振弦采集仪在岩土工程监测中的性能评价及标准选择 河北稳控科技振弦采集仪是一种重要的岩土工程监测仪器,用于测量振动场的频率、振幅和相位等参数。它在岩土工程施工和地震监测中具有重要的应用价值。本文将对振弦采集仪的性能评价及标准选择进行详细介绍。 首先,振弦采集仪…

VBA 创建透视表,录制宏,自动化报表

目录 一. 数据准备二. 需求三. 准备好报表模板四. 执行统计操作&#xff0c;录制宏4.1 根据数据源创建透视表4.2 填充数据到报表4.3 结束宏录制 五. 执行录制好的宏&#xff0c;自动化报表 一. 数据准备 ⏹数据源1 姓名学科成绩丁志敏语文91李平平语文81王刚语文64张伊语文50…

【Python深度学习(第二版)(3)】初识神经网络之深度学习hello world

文章目录 一. 训练Keras中的MNIST数据集二. 工作流程1. 构建神经网络2. 准备图像数据3. 训练模型4. 利用模型进行预测5. (新数据上)评估模型精度 本节将首先给出一个神经网络示例&#xff0c;引出如下概念。了解完本节后&#xff0c;可以对神经网络在代码上的实现有一个整体的了…

python教程10-集合

集合(set)是一个无序的不重复元素序列。 集合中的元素不会重复,并且可以进行交集、并集、差集等常见的集合操作。 可以使用大括号 { } 创建集合,元素之间用逗号 , 分隔, 或者也可以使用 set() 函数创建集合。 集合创建:注意:创建一个空集合必须用 set() 而不是 { },因为…

SH150S1光电吊舱

SH150S1光电吊舱 1产品应用 SH150S1是一款三轴三光吊舱&#xff0c;集成了最远测程达3.0km&#xff0c;精度小于2米的半导体激光测距机&#xff0c;640512高分辨率红外相机&#xff0c;30倍光学变倍可见光相机以及高稳定精度平台框架&#xff1b;可安装于中小型无人机&#x…

SQL注入(pikachu)

注入流程 SQL注入注入点判断与注入手法介绍 - FreeBuf网络安全行业门户 【干货】如何判断 Sql 注入点_判断是否存在sql注入-CSDN博客 1、是否有注入点--->第一要素-----在参数后面加上单引号,如果页面返回错误,则存在 Sql 注入。原因是无论是字符型还是整型都会因为单引号个…

FFMpegCore 对音视频格式转换

下载Nuget 包FFMpegCore FFMpeg的官网下载转码程序 点击Dowload 选择对应系统的下载源本次为Windows系统 选择Full标记的压缩包 解压后的文件结构ffmpeg版本 将bin文件夹下的ffmpeg.exe文件放置在程序项目的根目录下 视频格式转换 以下是将.mov转.mp4/// <summary> ///…