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

智能推荐

win10使用roLabelimg(可标注旋转矩形)保存带有汉字的label及xml转txt(含文件)_rolabellmg下载-程序员宅基地

文章浏览阅读2.2k次,点赞2次,收藏22次。win10使用roLabelimg保存带有汉字的label(含文件)简介roLabelimg可以标注旋转矩形,虽不太好用,但比不能标注强太多太多,转载请注明出处。文件地址源文件修改&编译将roLabelImg.py中的#!/usr/bin/env python# -*- coding: utf8 -*-更改为#!/usr/bin/env python# -*- coding: utf-8 -*-编译pyrcc5 -o resources.py resources.qrc_rolabellmg下载

对Neo4j导出数据做知识图谱可视化 D3库实现_neo4jd3-程序员宅基地

文章浏览阅读2.5w次,点赞52次,收藏360次。知识图谱可视化 D3库的使用引言Neo4j导出数据引言好久没用D3库作可视化了,现在主要是用百度的echarts库,在项目中做简单的图表太方便了。但像是做关系图其实用echarts也很方便,这次用D3实现主要是复习一下以前做的东西,顺便记录一下。以下是我参考到的实例代码:D3官方图实例参考echarts做关系图实例参考Neo4j导出数据我们先通过Cypher查询将数据从Neo4j中查询出来,Neo4j构建和查询可以参考我上篇博客基于Neo4j的外贸企业关系图谱做企业相似度查询查询后的结果如下_neo4jd3

拓扑空间、距离空间、向量空间和内积空间_拓扑和距离的关系-程序员宅基地

文章浏览阅读7.5k次。拓扑空间是最基本的,是集合+开集构成,这个空间里没有距离。就像人群+关系=社会一样。距离空间=拓扑空间+距离。这个距离的来源主要是定义出来的。距离空间是拓扑空间的一个子集,也可以理解为是一个子概念。同理向量空间又是距离空间的一个子集,子概念。对拓扑向量空间来说,它是一个度量空间当且仅当其有可数局部拓扑基(见Rudin的泛函分析,对一般拓扑空间来说的充要条件还要多一个,这就是NS度量化定理,见Munk_拓扑和距离的关系

dubbo实战之一:准备和初体验,Java进阶-程序员宅基地

文章浏览阅读923次,点赞21次,收藏15次。Java架构学习技术内容包含有:Spring,Dubbo,MyBatis, RPC, 源码分析,高并发、高性能、分布式,性能优化,微服务 高级架构开发等等。还有Java核心知识点+全套架构师学习资料和视频+一线大厂面试宝典+面试简历模板可以领取+阿里美团网易腾讯小米爱奇艺快手哔哩哔哩面试题+Spring源码合集+Java架构实战电子书+2021年最新大厂面试题。《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

20来行的Python拼写检查器_拼写检查 专有名词 python-程序员宅基地

文章浏览阅读3.1k次,点赞3次,收藏8次。介绍了一个基于贝叶斯方法的Python写的20来行的拼写检查器_拼写检查 专有名词 python

matlab仿真三相不平衡度,matlab调用openDSS进行三相不平衡潮流计算-程序员宅基地

文章浏览阅读2k次。应用介绍这是使用matlab调用openDSS进行三相不平衡潮流计算过程和方法步骤,OpenDSS是由美国电科院(EPRI)开发的开源配电系统仿真工具。 用户可以在使用COM接口的同时使用OpenDSS仿真任何配电网系统(有关详细信息,请参见OpenDSS手册)。 在这里,OpenDSS使用Matlab COM接口用于配电系统的潮流计算。 以下讲述了从安装到openDSS潮流计算,如何定义各个分布..._opendss matlab安装

随便推点

HTML <table> 标签_html table标签-程序员宅基地

文章浏览阅读756次。table> 标签定义 HTML 表格。简单的 HTML 表格由 table 元素以及一个或多个 tr、th 或 td 元素组成。tr 元素定义表格行,th 元素定义表头,td 元素定义表格单元。更复杂的 HTML 表格也可能包括 caption、col、colgroup、thead、tfoot 以及 tbody 元素。_html table标签

VS+OpenCV安装和卸载指南(详细)_visual studio彻底卸载opencv和opencv_contrib windows-程序员宅基地

文章浏览阅读4.2k次,点赞5次,收藏37次。1、首先要保证visualstdio与OpenCV的版本号对应。opencv 2.4.10 == vs2010、vs2012、vs2013opencv 2.4.13 == vs2012、vs2013opencv 3.4.0 == vs2015、vs2017opencv 3.4.1 == vs2015、vs20172、卸载原来版本的opencvopencv的卸载主要有五步。第..._visual studio彻底卸载opencv和opencv_contrib windows

洛谷3356火星探险问题-程序员宅基地

文章浏览阅读91次。题目链接:火星探险问题这一题类似于深海机器人问题唯一的区别是这一题的资源不再位于边上而位于点上,由于资源只能开采一次所以需要考虑拆点接下来就和那一道问题一样了接下来又是喜闻乐见的输出方案了我们从源点出发,每一次dfs向东走还是向南走,记录一个当前枚举方案时的流量,当某条边的记录流量与原本应当流的流量相同时则说明不能再从这里走,否则就顺着这里向下dfs注意及时return#i..._洛谷 u90034 题目 神秘岛探险

python写一个类600行代码_带你领略算法的魅力,一个600行代码的分词功能实现(二)...-程序员宅基地

文章浏览阅读127次。从大学毕业到工作的开始几年,一直觉得大学期间学的线性代数,离散数学,概率论简直是浪费时间。那时候实际做的代码,大部分都是数据进销存。数据输入到数据库介质中的转换,CS,BS架构都写过一些。总觉得现实生活中的逻辑,基本就是柴米油盐那么点东西,根本不需要复杂的算法。最多用点排序算是最给面子了。真正接触算法的魅力,是在写游戏的时候。那时候写寻路算法,第一次听说A*,不喜欢用别人写好的,于是自己实现了一遍..._python中型游戏600行代码

java智慧农业系统-农业云端农产品仓储子系统_农产品货运客体子系统-程序员宅基地

文章浏览阅读1.9k次。下载地址:https://download.csdn.net/download/kzpqi88/80784670项目介绍:java智慧农业系统-农业云端农产品仓储子系统系统说明:1、主要功能计费配置、仓库配置、基础配置、计费管理、基础资料、仓库管理、月台管理、进货管理、出货管理、退货管理、库内管理、盘点管理、库存查询、PDA功能、分析报表、分析图表、域验证。2、主要流程收货流程,上架流程,移货作业、拣货流程:批量拣货,按单拣货、盘点流程、计费流程。1,开发环境:开发工具:IDEA(强烈_农产品货运客体子系统

总结 XSS 与 CSRF 两种跨站攻击_restclient测试xss-程序员宅基地

文章浏览阅读1k次。在那个年代,大家一般用拼接字符串的方式来构造动态 SQL 语句创建应用,于是 SQL 注入成了很流行的攻击方式。在这个年代, 参数化查询 [1] 已经成了普遍用法,我们已经离 SQL 注入很远了。但是,历史同样悠久的 XSS 和 CSRF 却没有远离我们。由于之前已经对 XSS 很熟悉了,所以我对用户输入的数据一直非常小心。如果输入的时候没有经过 Tidy 之类的过滤,我一定会在模板输出时候全_restclient测试xss