python使用广度优先搜索算法解决二叉树最大、最小深度

news2024/11/24 7:34:45

对于广度优先搜索算法的一个经典应用问题,也就是对二叉树求其最大深度、最小深度问题。对于给定的二叉树的最大深度即为二叉树的根节点到最远的叶子结点之间的高度,而相应的最小深度就是根节点与离根节点最近的叶子节点之间的高度。

添加图片注释,不超过 140 字(可选)

上面这颗树的最大深度为3,最小深度为2,也就是根节点1到5节点的高度和根节点1到2节点的高度。

首先就是对二叉树的最大深度的问题解决思路分析,在借助队列的结构来完成,对二叉树进行逐层搜索,使用一个变量来累计深度,这样就可以返回最大深度了。主要使用双层循环迭代的方式,在进入迭代的过程中,只要队列不为空的情况下,就继续访问目前队列职工的所有节点,先访问呢1节点,然后将1节点的子节点2和3咱是存在一个列表黄总工,然后在访问完当前的队列中的全部节点之后,就将暂时的列表合并进入到队列中,并且最大深度变量自增,经过这次循环之后,队列中就有了2和3节点,再通过第二层循环访问这两个节点,并且将节点2和3暂存到列表中,节点2没有子节点,节点3有4和5节点,对列表和最大深度变量进行更新,最后就是4和5节点,访问这两个节点之后就对最大深度变量更新,就会得到返回值最大深度为3。整个过程中使用的双层循环进行逐层访问,第一层访问的目的是为了检测队列是否为空的状态,如果不为空就继续循环,第二层循环的目的是访问目前的队列中的全部的节点,也就是这一层中的所有的节点,然后访问之后就对最大深度变量进行自增,就可以得到最后想要的结果。下图为图示过程:

添加图片注释,不超过 140 字(可选)

添加图片注释,不超过 140 字(可选)

添加图片注释,不超过 140 字(可选)

最大深度的python实现代码如下:

from collections import deque
def maxDepth( root):
    if not root:
        return 0
    ans=0
    queue=deque([root])
    while queue:
        tmp=[]
        while queue:
            node=queue.popleft()
            if node.left:
                tmp.append(node.left)
            if node.right:
                tmp.append(node.right)
        queue.extend(tmp)
        ans+=1
    return ans

对应的最小深度的过程会相对简单一些,在对二叉树进行从上至下的访问的过程中,只要访问到的是叶节点,并且证明这个叶节点到根节点是最近的叶节点,也就可以得到了该二叉树的最小深度,同样是使用队列来进行实现,如果当前节点是叶节点,返回该节点的深度为最终的结果,如果当前节点不满足判断且不是空节点,就存在子节点,将子节点继续入队。对应的python的代码实现如下:

from collections import deque
def minDepth(root):
    if not root:return 0
    queue=deque([(1,root)])
    while(queue):
        depth,node=queue.popleft()
        if node and not node.left and  not node.right:
            return depth
        if node:
            queue.append((depth+1,node.left))
            queue.append((depth+1,node.right))

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

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

相关文章

MyBatisPlus学习笔记一

1、简介 MyBatisPlus(简称MP)是一个MyBatis的增强工具,在MyBatisMyBatisMyBatis的的基础上只做增强不做改变,为简化开发,提高效率而生。 官网:MyBatis-Plus mybatisplus通过扫描实体类,并基于…

贪心算法(思路)

最近在cf上做了很多贪心的题,写篇博客来总结一下 Problem - C - Codeforces 看第一道题 不难看出,我们需要在数组中找到一段奇偶相间的序列,要使他们的和最大, 在图中我们假设[1,2]和[3,4]是奇偶相间的序列,我们在在…

如何在 Microsoft Edge 浏览器中启用自动刷新

你是否经常发现自己在使用 Microsoft Edge 时点击刷新按钮?如果您需要一个网页以设定的时间间隔自动更新,那么请接着往下看。 在这篇博文中,我们探讨如何在 Microsoft Edge 浏览器中启用和管理自动刷新功能。 为什么选择自动刷新&#xff1…

【分布式】分布式链路跟踪技术

为什么需要分布式链路追踪 提到分布式链路追踪,我们要先提到微服务。相信很多人都接触过微服务。微服务是一种开发软件的架构和组织方法,它侧重将服务解耦,服务之间通过API通信。使应用程序更易于扩展和更快地开发,从而加速新功能…

使用requests库测试post请求 操作流程

第一步 谷歌f12或其他抓包工具抓包,这里随机抓一个post请求 url:https://eva2.csdn.net/v3/06981375190026432f77c01bfca33e32/lts/groups/dadde766-b087-42da-8e67-d2499a520ee7/streams/a0119567-bf91-4314-ab75-f683ba6c0c0a/logs 第二步 导包 impo…

国科大计算机体系结构期末考试——停更,手写更快

题型一、第二章的画图 给一个逻辑表达式,画出晶体管级别的电路图 cmos电路的基本电路: 与非门的功能是对多个输入信号进行逻辑与操作,然后对结果进行取反。 或非门的功能是对多个输入信号进行逻辑或操作,然后对结果进行取反。 …

适用于安防 音响 车载等产品中中的音频接口选型分析

在人工智能兴起之后,安防市场就成为了其全球最大的市场,也是成功落地的最主要场景之一。对于安防应用而言,智慧摄像头、智慧交通、智慧城市等概念的不断涌现,对于芯片产业催生出海量需求。今天,我将为大家梳理GLOBALCH…

怎么使用EIDE进行调试STM32单片机?

cortex-debug 用法 - Blog - Embedded IDE Forum (em-ide.com) 【VScode Embedded IDE】Keil工程导入VScode,与Keil协同开发MCU_vscode编辑keil工程-CSDN博客 Vscode EIDECortex Debug搭建STM32开发仿真环境_vscode cortex-debug-CSDN博客 可以结合一下上述三位大…

帆软report 设置条件属性,值为负数标为红色功能时,不生效

详细情况: 在设置负数为红色功能前,已经有一个条件属性,数据集获取的值为空或者为0时,转换成 - 符号。如下图: 具体表单显示效果如下: 条件属性2设置 原因 因为条件属性1设置的 - 符号没有设置颜色&#xf…

怎么做拼团链接_生鲜果蔬商家都在用的小程序拼团系统

拼团链接:重塑营销新格局 在当今这个信息爆炸的时代,消费者面对海量信息,选择变得尤为重要。如何在众多品牌中脱颖而出,让消费者愿意主动为你驻足?答案就是——拼团链接。 拼团,是一种社交电商的创新形式。…

【网络】网络层ICMP协议

🦄 个人主页——🎐开着拖拉机回家_Linux,大数据运维-CSDN博客 🎐✨🍁 🪁🍁🪁🍁🪁🍁🪁🍁 🪁🍁🪁&am…

STM32的USB设备库

适用范围:“on the STM32F10xxx,STM32F37xxx, STM32F30xxx and STM32L15xxx devices.” STM32_USB-FS-Device_Lib_V4.0.0.rar(访问密码:1666)https://url48.ctfile.com/f/33868548-1000799917-a5409d?p1666 适用范围&#xff1…

入门实战丨Python小游戏经典案例

文章目录 写在前面判断与循环小游戏猜数游戏龙的世界 写在后面 写在前面 本期内容:两个个简单的Python小游戏入门案例。 实验需求:python 实验目标:掌握基本的判断与循环语句。 判断与循环 判断与循环是编程中非常重要的两个概念&#x…

DAC高速线缆:性能卓越的连接解决方案

DAC高速线缆是一种广泛应用于数据中心和云计算等领域的高性能连接解决方案。它通过直接连接设备之间的端口,实现了高速、低延迟的数据传输。本文将介绍DAC高速线缆的定义、组成、作用以及与光纤线的区别,同时提供详细的使用方法和相关问题的解答。 第一…

AlexNet(fashion-mnist)

前言 AlexNet相较于LeNet-5具有更深的网络结构,采用relu激活函数。 AlexNet 参数更多,计算量更大,计算速度更慢,精度更高。 netnn.Sequential(nn.Conv2d(1,96,kernel_size11,stride4,padding1),nn.ReLU(),nn.MaxPool2d(kernel…

启用Hyper-V的三种方法,总有一种适合你

想在Windows 10计算机上的虚拟机中安装并运行Linux或更早版本的Windows操作系统吗?你将很高兴知道,你不需要第三方虚拟化软件(如VirtualBox)来在Windows 10上安装和运行Linux和Windows。 Windows 10中的内置Hyper-V工具允许你创建…

怎么使用好爬虫IP代理?爬虫代理IP有哪些使用技巧?

在互联网时代,爬虫技术被广泛应用于数据采集和处理。然而,在使用爬虫技术的过程中,经常会遇到IP被封禁的问题,这给数据采集工作带来了很大的困扰。因此,使用爬虫IP代理成为了解决这个问题的有效方法。本文将介绍如何使…

vscode中如何解决 Comments are not permitted(JSON中不允许注释)

vs code中如何解决Comments are not permitted(JSON中不允许注释)? 简单几步,让你轻松解决。 1.使用vscode打开json文件后,一些注释显示如图所示,有红色波浪线,影响阅读 2. 悬浮在波浪线报错信…

Flink构造宽表实时入库案例介绍

1. 安装包准备 Flink 1.15.4 安装包 Flink cdc的mysql连接器 Flink sql的sdb连接器 MySQL驱动 SDB驱动 Flink jdbc的mysql连接器 2. 入库流程图 3. Flink安装部署 上传Flink压缩包到服务器,并解压 tar -zxvf flink-1.14.5-bin-scala_2.11.tgz -C /opt/ 复…

史上最全的Mysql优化大全,总结

直接上总结图: MySQL调优与实操 SQL调优 适用于数据量较大的情况下 explain 可以通过explain关键字来分析SQL执行计划,然后进行适当的分析调优。 慢查询日志 永久生效 避免不走索引 1、尽量避免在字段开头模糊查询 2、尽量避免使用in 和 not in 3. 尽量避免进行 null 值的判断…