leecode#二叉树的最小深度#路径总和_二叉树最浅叶节点和-程序员宅基地

技术标签: 算法  leetcode  职场和发展  

题目描述:

给定一个二叉树,找出其最小深度。

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

说明:叶子节点是指没有子节点的节点。

分析:

首先可以想到使用深度优先搜索的方法,遍历整棵树,记录最小深度。

对于每一个非叶子节点,我们只需要分别计算其左右子树的最小叶子节点深度。这样就将一个大问题转化为了小问题,可以递归地解决该问题。

代码:

class Solution:
    def minDepth(self, root: Optional[TreeNode]) -> int:
        if root is None:
            return 0
        if not root.left and not root.right:
            return 1
        min_depth = 10**9
        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

对之前那个“二叉树最大深度”直接改是不行的,因为最小深度定义:从根节点到最近叶子节点的最短路径上的节点数量。

题目描述:

给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。

叶子节点 是指没有子节点的节点。

分析:广度优先搜索(BFS):又译作宽度优先搜索,或横向优先搜索,是一种图形搜索方法。简单的说,BFS是从根节点开始,沿着树的宽度遍历树的节点。如果所有节点均被访问,则算法终止。

首先我们可以想到使用广度优先搜索的方式,记录从根节点到当前节点的路径和,以防止重复计算。

这样我们使用两个队列,分别存储将要遍历的节点,以及根节点到这些节点的路径和即可

代码:

class Solution:
    def hasPathSum(self, root: TreeNode, sum: int) -> bool:
        if not root:
            return False
        que_node = collections.deque([root])
        que_val = collections.deque([root.val])
        while que_node:
            now = que_node.popleft()
            temp = que_val.popleft()
            if not now.left and not now.right:
                if temp == sum:
                    return True
                continue
            if now.left:
                que_node.append(now.left)
                que_val.append(now.left.val + temp)
            if now.right:
                que_node.append(now.right)
                que_val.append(now.right.val + temp)
        return False

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44267765/article/details/128049206

智能推荐

GIS地理空间数据免费获取_diva gis-程序员宅基地

文章浏览阅读1.1w次,点赞20次,收藏183次。GIS地理空间数据免费获取国内:一、测绘地理信息局会提供权威的数据。需要进入全国地理信息资源目录服务系统网站(http://www.webmap.cn/main.do?method=index),该网站提供:30米全球地表覆盖数据,GlobeLand30能够提供包括:地理位置、分布范围和景观格局等直观的陆表地表覆盖的空间分布和信息。1:100万全国基础地理数据库全国1:100万基础地理数..._diva gis

王者竞速游戏服务器维护了,《王者荣耀》不停机更新维护-程序员宅基地

文章浏览阅读170次。今天王者荣耀的服务器似乎出了点小问题,玩家在游戏里出现了许多BUG,所以官方对全服的玩家进行了一次不停机的更新,那么此次更新的内容相信大家都很想知道吧,小编为大家整理了相关的资讯,感兴趣的玩家就跟着小编一起来看看吧,希望能帮到你。王者荣耀7月17日进行了不停机更新维护,下面给大家带来具体的更新内容,一起来看看吧。亲爱的召唤师:我们计划在2019年7月17日 8:30-9:30 对全服进行不停机更新..._为什么王者荣耀今天不停机

将LGBM用作二分类问题之上_matlablgbm模型-程序员宅基地

文章浏览阅读460次,点赞8次,收藏9次。LGBM(Light Gradient Boosting Machine)可以用于解决二分类问题。事实上,LGBM在实际应用中被广泛用于分类问题,包括二分类问题。在使用LGBM进行二分类问题时,你可以指定目标变量的类型和相关参数。对于二分类问题,你可以使用。指定了二分类问题的目标。你可以根据具体问题和数据集的特点调整其他参数,以优化模型性能。表示使用对数损失作为损失函数,是二分类问题的默认设置。被用于创建一个二分类模型,_matlablgbm模型

Java包装类;基本数据类型与字符串的相互转换_java 基本类型转包装类-程序员宅基地

文章浏览阅读531次。Java包装类;基本数据类型与字符串的相互转换_java 基本类型转包装类

【重构架构设计】_重构设计-程序员宅基地

文章浏览阅读368次,点赞9次,收藏9次。通过以上两个示例,可以看到领域驱动设计的特点:每个领域都有自己的模型(User和Order类),聚合根(User和Order类的实例)和业务逻辑(changePassword、addItem等方法)。引入领域驱动设计(DDD):DDD是一种面向领域模型设计的方法,通过将业务领域划分为多个小的子领域来进行解耦。通过使用微服务架构,可以将系统解耦为多个独立的服务,提高系统的可用性和可伸缩性。通过以上的步骤,可以有效进行业务解耦,提高代码的高可用性和可维护性。在订单管理领域中,专注于订单的信息、行为和业务规则。_重构设计

cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration的解决-程序员宅基地

文章浏览阅读2.3w次,点赞7次,收藏12次。导入了一个工程,编译什么的都还好,但是报了一个XML的错误。cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'dubbo:application'. 具体错误如下:Multiple annotations found at this line: ..._cvc-complex-type.2.4.c: the matching wildcard is strict, but no declaration

随便推点

druid完成数据库列表和分页展示和增删改查_apache druid 分页-程序员宅基地

文章浏览阅读789次。一、basedao + druid数据库连接池c3p0druid:魔鬼,号称最好的java 连接池为什么要用数据连接池?1.避免重复创建链接,链接创建不关闭情况​ 数据库链接非常宝贵/资源有限2.可以提高查选效率(以前频繁创建链接)3.便于对链接的同一管理和监控,便于优化应用线程池和数据库连接池统称为 池化技术1、创建servelt工程commons-beanutils-1.8.3.jar 将map 转化为对象工具类commons-dbutils-1.7.jar qu_apache druid 分页

Solidworks装配体打包/Pack and Go和另存为两种方法的区别-程序员宅基地

文章浏览阅读7.6k次。Solidworks装配体打包/Pack and Go和另存为两种方法的区别_pack and go

戴尔笔记本怎么安装统信uos系统?戴尔笔记本安装统信uos+win双系统_win7和uos双系统-程序员宅基地

文章浏览阅读2.6k次。答案是肯定的,还有的网友问,能不能保留本地windows系统然后再安装统信uos形成双系统,答案也是肯定的,下面小编就教大家在保留本地windows系统的同时安装统信uos系统形成双系统的方法教程。1,插入制作好的统信uos系统盘,重启按F12或FN+F12调出启动管理对话框,默认因为是uefi的引导,所以要选择uefi开头的USB HDD识别到U盘启动进入统信uos系统安装界面,如下图所示;3,接着进入统信uos系统安装界面后,因为我们要保留本地的windows系统,所以这里选择自定义安装,如下图所示;_win7和uos双系统

react-router v6实现动态的title(react-router-dom v6)_react router v6 改 title-程序员宅基地

文章浏览阅读5.2k次,点赞3次,收藏2次。react-router v6实现动态的title(react-router-dom v6)_react router v6 改 title

掌握之分布式-6.分布式数据库-程序员宅基地

文章浏览阅读162次。掌握高并发、高可用架构第三章 分布式本章介绍分布式架构的底层技术。主要说明面试过程中可能被问到的技术点。第六节 分布式数据库MyCat分库分表 Sharding1. 分库分表的方法垂直切分,也就是因为表多而数据多,将关系紧密(比如统一模块)的表切分出来放到一个服务器中水平切分,表不多,而是表中数据量庞大,也就是把表的数据按照某种规则切分到多个服务器中现实中多是这两种的混合2. 分..._分布式数据库使用group by 代价大吗

克隆的虚拟机无法修改静态ip_vm克隆的虚拟机ip不能改为静态ip-程序员宅基地

文章浏览阅读547次。job for network.service failedsystemctl restart network.service failed造成这种情况,一般可能是由于克隆的虚拟机,MAC地址与本机的对应不上,所以需要修改MAC地址与本机对应上。ip addr#查看本机的MAC地址vim /etc/sysconfig/network-script/ifcfg-ens33#修改MAC地址有时候ip地址会莫名的消失,因为有2套网络管理工具将NetworkManager关闭systemctl s_vm克隆的虚拟机ip不能改为静态ip