力扣算题day16(树使用递归方法需要记住,都会遍历完整个树,叶子节点是整个递归的某次递归结束)

news2025/1/13 15:50:15

104、二叉树最大深度

        

        给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。

 测试代码:

class TreeNode:
    def __init__(self, val=None, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right


class Solution:
    """二叉树层序遍历迭代解法"""

    def levelOrder(self, root):



s = Solution()
# 构造一个二叉树,此处省略了构造函数的实现
# tree = TreeNode()

tree = TreeNode(3)
tree.left=TreeNode(9)
tree.right = TreeNode(20)
tree.right.left = TreeNode(15)
tree.right.right = TreeNode(7)

print(s.levelOrder(tree))  # 输出 [1, 2, 3]

递归方法(后序遍历):

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

        思路详解:

 

 111.二叉树的最小深度

        给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明: 叶子节点是指没有子节点的节点。

        深度优先算法(递归):

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

        min_depth=inf

        if root.left:
            min_depth=min(self.minDepth(root.left),min_depth)
        if root.right:
            min_depth=min(self.minDepth(root.right),min_depth)

        return min_depth+1

        递归,处理左右子树的各种情况(if-else):

class Solution:
    def minDepth(self, root: TreeNode) -> int:
        if not root: return 0

        ans = 0
        if not root.left and not root.right: 	# 叶子节点
            ans = 1
        elif root.left and root.right:  # 左右子树均不为空
            ans = min(self.minDepth(root.left), self.minDepth(root.right)) + 1
        elif root.left:		# 左子树不为空 & 右子树为空
            ans = self.minDepth(root.left) + 1
        else:			# 左子树为空 & 右子树不为空
            ans = self.minDepth(root.right) + 1
        return ans

 

 

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

        看懂我上面两道题解析,这道题完全看得懂。

        递归代码:

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

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

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

相关文章

【Linux】缓存数据库Memcached

一、 什么是缓存 缓存是指可以进行高速数据交换的存储器,它先于内存与CPU交换数据,因此速率很快。 从性能分析: CPU缓存>内存>磁盘>数据库 从性能来看内存是介于CPU和磁盘,在实际中内存是CPU和磁盘的桥梁。buffer和cache…

【Linux】进程优先级PRI NI/并行与并发的概念

文章目录 基本概念为什么会有优先级?如何查看进程优先级?PRI and NI如何更改进程优先级?优先级vs权限并行与并发的概念 基本概念 CPU资源分配的先后顺序,就是指进程的优先权(priority)。优先权高的进程有优…

C# 使用PdfiumViewer实现对PDF文档打印预览(二)

文章目录 前言关于PdfiumViewer配置PdfiumViewer环境PdfiumViewer 打开并预览本地的PDF文档PdfiumViewer 预览PDF文件流小节附录 前言 想要对PDF文档进行预览和打印,实际上这个文档可以是存在的,也可以是一个PDF文件流(本地并没有PDF文件&am…

家用洗地机哪个好用?家用洗地机分享

洗地机是一种代表现代化清洁的设备,它具有高效、环保、经济、智能等多种特点。洗地机可以为您提供先进的清洁技术和设备,为您的清洁工作提供有力的支持。洗地机可以适应不同场所和建筑物的需求,提高工作效率和卫生形象。因此,选择…

Dockerfile构建镜像读取环境变量问题

起初使用如下Dockerfile构建Java镜像&#xff1a; FROM 10.170.33.245/base/openjdk:11.0.6-jdk-slim-busterMAINTAINER luo.hq <luo.hqneusoft.com>ENV TZ "Asia/Shanghai" ENV TERM xterm ENV LC_ALL C.UTF-8 ENV LANG C.UTF-8 ENV JVM_OPTIONS ""…

CSS 径向渐变

background: radial-gradient([ <ending-shape> || <size> ]? [ at <position> ]? , <color-stop-list> ); 属性解析&#xff1a; ending-shape &#xff1a;渐变结束的形状 默认为椭圆ellipse&#xff0c;可以设置为圆形circle size&#xff1a;渐…

R语言 | 认识apply家族

目录 一、apply()函数 二、sapply()函数 三、lapply()函数 四、tapply()函数 ​五、iris鸢尾花数据集 R语言提供了一个循环系统称apply家族&#xff0c;它具有类似for循环的功能&#xff0c;但是若想处理相同问题&#xff0c;apply家族函数好用太多了。 一、apply()函数 …

隐藏加密文件夹怎么找到?看这里就够了!

当隐藏遇到加密&#xff0c;可以很好地保护电脑文件夹数据安全&#xff0c;那么隐藏加密的文件夹该怎么找到呢&#xff1f;方法其实很简单&#xff0c;下面我们通过两款提供文件夹隐藏加密的软件来了解一下。 文件夹加密超级大师 作为一款能够提供5种文件夹加密类型的软件&…

Java线程池七个参数详解:核心线程数、最大线程数、空闲线程存活时间、时间单位、工作队列、线程工厂、拒绝策略

ThreadPoolExecutor是JDK中的线程池实现&#xff0c;这个类实现了一个线程池需要的各个方法&#xff0c;它提供了任务提交、线程管理、监控等方法。 下面是ThreadPoolExecutor类的构造方法源码&#xff0c;其他创建线程池的方法最终都会导向这个构造方法&#xff0c;共有7个参…

什么是网络——TCP/IP协议

个人简介&#xff1a;云计算网络运维专业人员&#xff0c;了解运维知识&#xff0c;掌握TCP/IP协议&#xff0c;每天分享网络运维知识与技能。座右铭&#xff1a;海不辞水&#xff0c;故能成其大&#xff1b;山不辞石&#xff0c;故能成其高。个人主页&#xff1a;小李会科技的…

聚观早报 | 科大讯飞称10月整体赶超ChatGPT;苹果遭欧盟警告

今日要闻&#xff1a;科大讯飞称10月整体赶超ChatGPT&#xff1b;苹果遭欧盟警告&#xff1b;科研人员研发纳米粒子治疗癌症&#xff1b;中小学教材不得夹带商业广告&#xff1b;Z-Library又被美国FBI查封了 科大讯飞称10月整体赶超ChatGPT 5 月 6 日&#xff0c;科大讯飞董事…

JS判断用户终端与CSS判断用户终端的写法(源代码实例)

当用户使用手机等移动终端访问网站时&#xff0c;我们可以通过程序检测用户终端类型&#xff0c;如果是手机用户&#xff0c;则引导用户访问适配手机屏幕的移动站点。 JS判断用户终端&#xff1a; // 判断浏览器类型 myBrowser() {var userAgent navigator.userAgent; //取得…

Python每日一练(20230508) 石子游戏 I\II\III

目录 1. 石子游戏 Stone Game I 2. 石子游戏 Stone Game II 3. 石子游戏 Stone Game III &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1. 石子游戏 Stone Game I Alice 和 Bob 用几堆…

数字化转型对企业的好处有哪些(下)

过时的技术、流程和客户关系管理困难是当前阻碍企业增长的主要障碍&#xff0c;CRM系统是企业数字化转型的主要工具&#xff0c;帮助企业简化操作、提高效率&#xff0c;为客户提供更加卓越的客户体验。下面说说&#xff0c;企业数字化转型的十大好处。 5、提升竞争力 数字技…

HQChart实战教程61-自定义十字星K线颜色

HQChart实战教程61-自定义平盘K线颜色 十字星步骤1. 注册事件2. 监听回调函数阐述说明HQChart插件源码地址完整的demo源码十字星 十字星是一种K线基本型态。十字星,是一种只有上下影线,没有实体的K线图。开盘价即是收盘价,表示在交易中,股价出现高于或低于开盘价成交,但收…

asp.net+sqlserver社区居民健康档案管理系统

社区居民健康档案管理系统1 摘 要1 1 课题背景及研究内容1 1.1 课题背景和意义1 1.2 研究现状1 1.3 论文结构安排1 2 系统开发环境3 2.1开发工具介绍3 2.1.1 Visual Studio介绍3 2.1.2 SQL Server介绍4 2.1.3 IIS介绍4 2.2 动态网站技术介绍4 2.3开发模式B/S介绍4 2.4 AS…

【云台】开源版本SimpleBGC的传感器校准与姿态融合

传感器校准 俄版云台使用的是 MPU6050&#xff0c;磁力计使用的是 HMC5883 MPU6050校准 MPU6050校准包含两部分&#xff1a;加速度计与陀螺仪。校准过程想要校准出的数据也就是加速度计与陀螺仪的温漂与零漂。 正常来说&#xff0c;如果将 IMU 朝上静置&#xff0c;加速度计…

SSM框架学习-Spring Framework系统架构

Spring是一个用来管理对象的技术&#xff1b; 上层需要依赖下层的支持&#xff1b; 面向切面编程&#xff1a;在不影响原始程序的基础上&#xff0c;增强功能&#xff1b; 提供数据访问与集成&#xff1a;说明兼容其它方式访问数据&#xff1b; Transactions&#xff1a;事务控…

第四十章 Unity 按钮 (Button) UI

本章节我们介绍一下按钮UI。首先&#xff0c;我们创建一个新的场景“SampleScene3.unity”。然后&#xff0c;在菜单栏中点击“GameObject”->“UI”->“Button”&#xff0c;截图如下 我们选中刚刚创建的Button&#xff0c;然后查看它的Inspector检视面板&#xff0c;如…

SonarQube Api调用指南

好几年前写过一篇sonar api调用的文档&#xff0c;很多人看&#xff0c;但是当时写的比较简陋&#xff0c;很多小伙伴在下方留言&#xff0c;也答应过一些小伙伴些一篇示例&#xff0c;本文主要目的是一篇扫盲贴。 一、接口文档 要使用sonarqube的api接口&#xff0c;你首先要…