当前位置: 首页 > article >正文

算法训练营第十三天|226.翻转二叉树、101. 对称二叉树、 104.二叉树的最大深度、111.二叉树的最小深度

递归

递归三部曲:

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

226.翻转二叉树

题目

在这里插入图片描述

思路与解法

第一想法: 递归,对每个结点进行反转

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:def invertTree(self, root: Optional[TreeNode]) -> Optional[TreeNode]:cur = rootif cur:tmp = cur.leftcur.left = cur.rightcur.right = tmpself.invertTree(cur.left)self.invertTree(cur.right)return root

101. 对称二叉树

题目

在这里插入图片描述

思路与解法

carl的讲解:

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:def isSymmetric(self, root: Optional[TreeNode]) -> bool:if not root:return Truedef compare(left, right) -> bool:if not ((left and right) or (not left and not right)):return Falseif not left and not right:return Trueelif left.val != right.val:return Falseif not compare(left.left, right.right):return Falseif not compare(left.right, right.left):return Falsereturn Truereturn compare(root.left, root.right)

104.二叉树的最大深度

题目

在这里插入图片描述

思路与解法

第一思路: 可以用层序遍历,记录层数。递归的话就得想想了。不好描述,先写吧。
写了出来,在37/39个示例报超时。
在这里插入图片描述
发现超时的原因了,因为 16、17、18行的代码将get_depth(depth, node.left)get_depth(depth, node.right)各计算了两次。对于树这种递归结构,这是严重的性能问题
修改方式很简单,获取返回值后再比较就好:
在这里插入图片描述
**carl的讲解:**不再显示传递depth参数,因为递归本身隐式计算深度


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

111.二叉树的最小深度

题目

在这里插入图片描述

思路与解法

第一想法: 就是简单的改前面的最大深度为最小深度。但是踩坑了,不是这么简单。
**carl的讲解:**因为最小深度的判别要比最大深度复杂。直接将max改成min是不行的,因为会把非叶子节点的值当作最小值返回。因为这个非叶子节点可能离根节点不愿,左边没节点但是右边有节点,这样他就可能得出的depth很小,但是他都不是叶子节点。

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:def minDepth(self, root: Optional[TreeNode]) -> int:return self.get_depth(root)def get_depth(self, node: Optional[TreeNode]) -> int:if not node:return 0left_depth = self.get_depth(node.left)right_depth = self.get_depth(node.right)if node.left is None and node.right is not None:return right_depth + 1if node.right is None and node.left is not None:return left_depth + 1return 1 + min(left_depth, right_depth) 

相关文章:

算法训练营第十三天|226.翻转二叉树、101. 对称二叉树、 104.二叉树的最大深度、111.二叉树的最小深度

递归 递归三部曲: 1.确定参数和返回值2.确定终止条件3.确定单层逻辑 226.翻转二叉树 题目 思路与解法 第一想法: 递归,对每个结点进行反转 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, le…...

二叉树的遍历与构造

好想回家,我想回家跟馒头酱玩,想老爸老妈。如果上天再给我一次选择的机会,我会选择当一只小动物,或者当棵大树也好,或者我希望自己不要有那么多多余的情绪,不要太被别人影响,开心点,…...

Python+OpenCV实现手势识别与动作捕捉:技术解析与应用探索

引言:人机交互的新维度 在人工智能与计算机视觉技术飞速发展的今天,手势识别与动作捕捉技术正逐步从实验室走向大众生活。通过Python的OpenCV库及MediaPipe等工具,开发者能够以较低门槛实现精准的手部动作识别,为虚拟现实、智能家…...

MYSQL服务的使用流程

MYSQL是一个单进程多线程,支持多用户,基于客户机/服务器的关系数据库管理系统。与其他数据库管理系统相比,MYSQL具有体积小,易于安装,运行速度快,功能齐全,成本低廉以及开源等特点。MYSQL可运行…...

华为云API、SDK是什么意思?有什么区别和联系?

目录 一、API:像菜单 + 打电话点餐 📌 本质解释: 🔧 操作方式(偏底层): 🍱 类比举例: 二、SDK:像外卖App(美团/饿了么)自动点餐 📌 本质解释: 🔧 操作方式(偏上层): 🍱 类比举例: 三、联系:SDK 是对 API 的“封装与简化” 四、操作实例对…...

【java】使用iText实现pdf文件增加水印功能

maven依赖 <dependencies><dependency><groupId>com.itextpdf</groupId><artifactId>itext7-core</artifactId><version>7.2.5</version><type>pom</type></dependency> </dependencies>实现代码 前…...

Python爬虫实战:获取艺恩娱数最新电影舆情数据并分析,为影院排片做参考

一、引言 在电影行业蓬勃发展的当下,了解影片的各项指数对于票房宣发排片起着至关重要的作用。艺恩娱数网站作为电影行业重要的数据平台,提供了丰富且有价值的电影相关数据。然而,直接从该网站获取数据面临诸多挑战。Python 作为一种功能强大、应用广泛的编程语言,拥有众多…...

Linux指令入门:DevOps与SRE视角

文章目录 Linux指令入门&#xff1a;DevOps与SRE视角一、Linux基础命令概述二、文件系统操作命令1. 文件与目录基本操作2. 文件查看与编辑3. 文件压缩与归档 三、进程管理命令1. 进程查看与控制2. 服务管理&#xff08;Systemd&#xff09; 四、网络管理命令1. 网络连接与诊断2…...

socket套接字-TCP

上一篇&#xff1a;socket套接字-UDP&#xff08;下&#xff09;https://blog.csdn.net/Small_entreprene/article/details/147569071?fromshareblogdetail&sharetypeblogdetail&sharerId147569071&sharereferPC&sharesourceSmall_entreprene&sharefromfr…...

Ctrl + D是如何与内核文件结束符对应的?如何模拟文件结束符?数字中间为什么不能插入空格或逗号?丰富多彩的语句结束符或分隔符?语句结束符?

目录 Ctrl D是如何与内核文件结束符对应的? 如何模拟文件结束符? 哪些编程语言支持数值中插入分隔符更容易看清楚? 下划线分隔符 数字中间为什么不能插入空格或逗号? 丰富多彩的语句结束符或分隔符 误用分号 语句结束符 不同语言的结束符 更改语句结束符 Ctrl …...

MiM: Mask in Mask Self-SupervisedPre-Training for 3D Medical Image Analysis

Abstract Vision Transformer在3D医学图像分析的自监督学习&#xff08;Self-Supervised Learning&#xff0c;SSL&#xff09;中展现了卓越的性能。掩码自编码器&#xff08;Masked Auto-Encoder&#xff0c;MAE&#xff09;用于特征预训练&#xff0c;可以进一步释放ViT在各…...

【STM32 学习笔记】I2C通信协议

注&#xff1a;通信协议的设计背景 3:00~10:13 I2C 通讯协议(Inter&#xff0d;Integrated Circuit)是由Phiilps公司开发的&#xff0c;由于它引脚少&#xff0c;硬件实现简单&#xff0c;可扩展性强&#xff0c; 不需要USART、CAN等通讯协议的外部收发设备&#xff0c;现在被广…...

【java】jdk8及以后的时间类总结

目录 1. LocalDate 2. LocalTime 4. ZonedDateTime 5. Duration 6. Period 7. DateTimeFormatter 1. LocalDate 说明&#xff1a;表示不带时区的日期&#xff08;年、月、日&#xff09;&#xff0c;不可变且线程安全。 import java.time.LocalDate;public class Local…...

深入理解 Istio 的工作原理 v1.26.0

解读最新版本的 Istio 源码确实是一项庞大的工程&#xff0c;但我可以为你梳理出一个清晰的脉络&#xff0c;并指出关键模块和代码路径&#xff0c;帮助你深入理解 Istio 的工作原理。 我们主要关注 Istio 的核心组件 Istiod 和数据平面的 Envoy Proxy。 前提&#xff1a; Go…...

深入理解卷积神经网络的输入层:数据的起点与预处理核心

内容摘要 本文围绕卷积神经网络输入层展开&#xff0c;详细介绍其在网络中的重要作用&#xff0c;包括接收不同领域数据的形式及传递数据的过程。深入解读数据预处理的关键操作&#xff0c;如去均值、归一化和PCA/白化。助力读者透彻理解输入层&#xff0c;为构建高效卷积神经…...

redis bitmap数据类型调研

一、bitmap是什么&#xff1f; redis原文&#xff1a; Bitmaps are not an actual data type, but a set of bit-oriented operations defined on the String type . This means that bitmaps can be used with string commands, and most importantly with SET and GET. 翻…...

如何用数学思想填报高考志愿

人一辈子有很多四年&#xff0c;但是很少有哪个四年对你一生的影响能超过大学这四年。 从18岁到22岁的这几年&#xff0c;是一个人真正成年的过程&#xff0c;很多人会在这段时间里认识一生的朋友&#xff0c;谈第一次真正的恋爱&#xff0c;第一次离开父母&#xff0c;自己生…...

LabVIEW 2019 与 NI VISA 20.0 安装及报错处理

在使用 Windows 11 操作系统的电脑上&#xff0c;同时安装了 LabVIEW 2019 32 位和 64 位版本的软件。此前安装的 NI VISA 2024 Q1 版&#xff0c;该版本与 LabVIEW 2019 32 位和 64 位不兼容&#xff0c;之后重新安装了 NI VISA 20.0。从说明书来看&#xff0c;NI VISA 20.0 …...

探索 JWT(JSON Web Token):原理、结构与实践应用对比

目录 前言1. 什么是 JWT&#xff1f;2. JWT 的组成结构详解2.1 Header&#xff08;头部&#xff09;2.2 Payload&#xff08;负载&#xff09;2.3 Signature&#xff08;签名&#xff09; 3. JWT 的实际作用3.1 身份认证3.2 信息传递与授权 4. JWT 与 Cookie、API Key 的比较4.…...

互联网大厂Java求职面试:云原生与AI融合下的系统设计挑战-1

互联网大厂Java求职面试&#xff1a;云原生与AI融合下的系统设计挑战-1 在当今云计算和人工智能迅猛发展的背景下&#xff0c;互联网大厂对Java工程师的要求已从传统的单体架构和业务逻辑处理&#xff0c;转向了更复杂的云原生架构设计、AI模型集成以及高并发系统的性能优化能…...

【Redis进阶】持久化

一、MySQL事务特性及Redis持久化需求 &#xff08;一&#xff09;MySQL事务特性 MySQL的事务具有四大核心特性&#xff0c;这些特性对于保证数据库操作的准确性和可靠性至关重要。 ​​原子性​​&#xff1a;事务中的所有操作要么全部成功&#xff0c;要么全部失败&#xf…...

[docker基础一]docker简介

目录 一 消除恐惧 1) 什么是虚拟化&#xff0c;容器化 2)案例 3)为什么需要虚拟化&#xff0c;容器化 二 虚拟化实现方式 1)应用程序执行环境分层 2)虚拟化常见类别 3)常见虚拟化实现 一&#xff09;主机虚拟化(虚拟机)实现 二&#xff09;容器虚拟化实现 一 消除恐…...

Texify - 数学公式OCR转换工具

文章目录 一、项目概览相关资源核心特性 二、安装指南三、使用示例1、命令行转换2、Python API调用3、交互式应用 四、性能基准运行你自己的基准测试 五、局限性 一、项目概览 Texify 是一个OCR模型&#xff0c;可将包含数学公式的图片或PDF转换为Markdown和LaTeX格式&#xf…...

RISC-V CLINT、PLIC及芯来ECLIC中断机制分析 —— RISC-V中断机制(一)

在长期的嵌入式开发实践中&#xff0c;对中断机制的理解始终停留在表面层次&#xff0c;特别当开发者长期局限于纯软件抽象层面时&#xff0c;对中断机制的理解极易陷入"知其然而不知其所以然"的困境&#xff0c;这种认知的局限更为明显&#xff1b;随着工作需要不断…...

时钟晶振锁相环pll方向技术要点和大厂题目解析

本专栏预计更新60期左右。当前第9期。 本专栏不仅适用于硬件的笔试面试,同样也适用于梳理硬件核心的知识点。 通过本文能得到什么? 首先,根据实战经验总结时钟晶振,锁相环的主要知识点,技术要点,面试考点; 然后,列出时钟晶振,锁相环的笔试面试的主要题型真题和模拟题,…...

图像处理篇--- HTTP|RTSP|MJPEG视频流格式

文章目录 前言一、MJPEG (Motion JPEG)基本概念技术特点编码方式传输协议数据格式 优势实现简单低延迟兼容性好容错性强 劣势带宽效率低不支持音频缺乏标准控制 典型应用 二、RTSP (Real Time Streaming Protocol)基本概念技术特点协议栈工作流程传输模式 优势专业流媒体支持高…...

【Harbor v2.13.0 详细安装步骤 安装证书启用 HTTPS】

Harbor v2.13.0 详细安装步骤&#xff08;启用 HTTPS&#xff09; 1. 环境准备 系统要求&#xff1a;至少 4GB 内存&#xff0c;100GB 磁盘空间。 已安装组件&#xff1a; Docker&#xff08;版本 ≥ 20.10&#xff09;Docker Compose&#xff08;版本 ≥ v2.0&#xff09; 域…...

C++中的static_cast:类型转换的安全卫士

C中的static_cast&#xff1a;类型转换的安全卫士 在C编程中&#xff0c;类型转换是不可避免的操作&#xff0c;而static_cast作为C四大强制类型转换运算符之一&#xff0c;是最常用且相对安全的一种转换方式。今天我们就来深入探讨一下这个重要的类型转换工具。 一、static_…...

开源与商业:图形化编程工具的博弈与共生

一、开源生态的破局之路&#xff1a;从技术实验到行业标准 在 2025 年全球开发者生态大会上&#xff0c;iVX 凭借 “全栈代码生成 AI 驱动开发” 的技术架构&#xff0c;被行业权威机构评选为 “年度技术创新典范”。作为 2012 年启动的开源项目&#xff0c;iVX 历经 17 年技…...

Docker + Watchtower 实现容器自动更新:高效运维的终极方案

文章目录 前言一、Watchtower 简介二、Watchtower 安装与基本使用1. 快速安装 Watchtower2. 监控特定容器 三、Watchtower 高级配置1. 设置检查间隔2. 配置更新策略3. 清理旧镜像4. 通知设置 四、生产环境最佳实践1. 使用标签控制更新2. 更新前执行健康检查3. 结合CI/CD流水线 …...