【详细讲解】二叉树的层序遍历

广度优先搜索

总结一下,思路就是:

加入元素,记录size,size就是当前这一层的元素个数。不断弹出元素,size -= 1, 同时加入弹出元素的左右孩子,直到size==0,说明当前层已经完全遍历完,然后让size=queue里面的元素个数,就是下一层一共有多少个元素,重复上述步骤。直到size==0且queue中没有元素了,就遍历完成了。

队列先进先出,符合一层一层遍历的逻辑,而用栈先进后出适合模拟深度优先遍历也就是递归的逻辑。

LeetCode对应的题(都是同样的思路):

102.二叉树的层序遍历
107.二叉树的层次遍历II
199.二叉树的右视图
637.二叉树的层平均值
429.N叉树的层序遍历
515.在每个树行中找最大值
116.填充每个节点的下一个右侧节点指针
117.填充每个节点的下一个右侧节点指针II
104.二叉树的最大深度
111.二叉树的最小深度

102. 二叉树的层序遍历

# 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 levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:if not root:return []que = collections.deque([root])result = []while que:level = []for i in range(len(que)):cur = que.popleft()level.append(cur.val)if cur.left:que.append(cur.left)if cur.right:que.append(cur.right)result.append(level)return result

107.  二叉树层序遍历(按照从下层到上层的顺序输出)

# 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 levelOrderBottom(self, root: Optional[TreeNode]) -> List[List[int]]:if not root:return []que = collections.deque([root])result = []while que:level = []for i in range(len(que)):cur = que.popleft()level.append(cur.val)if cur.left:que.append(cur.left)if cur.right:que.append(cur.right)result.append(level)return result[::-1]

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

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

相关文章

解决vue版本不一致导致不能正常编译

解决vue版本不一致导致不能正常编译 异常现象分析原因解决方案 异常现象 项目原本运行无异常,但安装了一个el-table-infinite-scroll的插件后,编译报错,截图如下 分析原因 vue版本与compile版本不一致,应该统一起来&#xff0…

C++下的内存管理

文章目录 内存分布C语言中动态内存管理方法C内存管理new/delete操作内置类型new和delete操作自定义类型operator new 和 operator deletenew和delete的实现原理定位new表达式 malloc/free和new/delete的区别内存泄漏 内存分布 栈:又叫做堆栈–非静态局部变量/函数参…

算法学习笔记(5.1)-基于比较的高效排序算法(快速排序,堆排序)

##时间复杂度O(NlogN) 目录 ##时间复杂度O(NlogN) ##快速排序 ##原理 ##图例 ##代码实现 ##堆排序 ##原理 ##图例 ##代码实现 ##快速排序 ##原理 快速排序的核心操作是“哨兵划分”,其目标是:选择数组中的某个元素作为“基准数”,…

【编译原理复习笔记】语法分析(一)

分类 语法分析可以按照分析方向分为两类 自顶向下/自底向上 自顶向下的分析 从分析树的顶部向底部方向构造分析树 每一步推导需要做两个选择: (1)需要替换哪个非终结符 (2)用哪个产生式 最左推导 在最左推导中&am…

【重学C++】02 脱离指针陷阱:深入浅出 C++ 智能指针

前言 大家好,今天是【重学C】系列的第二讲,我们来聊聊C的智能指针。 为什么需要智能指针 在上一讲《01 C如何进行内存资源管理》中,提到了对于堆上的内存资源,需要我们手动分配和释放。管理这些资源是个技术活,一不…

正点原子LWIP学习笔记(一)lwIP入门

lwIP入门 一、lwIP简介(了解)二、lwIP结构框图(了解)三、如何学习lwIP(熟悉) 一、lwIP简介(了解) lwIP是一个小型开源的TCP/IP协议栈 阉割的TCP/IP协议 TCP/IP协议栈结构&#xff0…

C语言游戏实战(12):植物大战僵尸(坤版)

植物大战僵尸 前言: 本游戏使用C语言和easyx图形库编写,通过这个项目我们可以深度的掌握C语言的各种语言特性和高级开发技巧,以及锻炼我们独立的项目开发能力, 在开始编写代码之前,我们需要先了解一下游戏的基本规则…

基础2 JAVA图形编程桌面:探索图形程序的抽象实现

嘿,大家好!我非常高兴又一次有机会与大家相聚,分享新的知识和经验。对于热爱编程和探索新技术的朋友们来说,今天的内容绝对不容错过。我为大家准备了一个详尽的视频教程:《基础2 JAVA 图形编程:主程序调用…

git拉取项目前需要操作哪些?

1.输入 $ ssh-keygen -t rsa -C "秘钥说明" 按enter键 2.出现 ssh/id_rsa:(输入也可以不输入也可以) 然后按enter键 3.出现empty for no passphrase:(输入也可以不输入也可以) 然后按enter键 4.出现same passphrase again: (输入也可以不输入也…

20240516-Flyme AIOS 特种兵发布会

目录 1 Flyme AIOS 2 路演功能 2.1 拖拽流转 2.2 任务剧本自定义 2.3 智能体商店 2.4 实况通知 2.5 AI壁纸 3 MYVU 3.1 翻译功能 3.2 AR导航-骑行 3.3 AI语音转文字-科技向善 3.4 Flyme AR-提词器增强 1 Flyme AIOS 1)目标:All in AI&#…

AI绘图Stable Diffusion,如何无损高清放大图片,保姆级教程建议收藏!

前言 我们在用 stable diffusion 制作AI图片时,默认生成图片的尺寸为512*512,即使是竖图一般也就是512*768,如果再把尺寸设置大一些,就会因为硬件算力不够而造成系统崩溃,今天就来跟大家聊一聊,如何将制作…

RocketMQ-Dashboard 控制台使用详解

1 安装部署 具体部署启动请参考:RocketMQ从安装、压测到运维一站式文档_rocketmq benchmark压测-CSDN博客 RocketMq的dashboard,有运维页面,驾驶舱,集群页面,主题页面,消费者页面,生产者页面&…

【Kubenetes】边缘计算KubeEdge架构设计详解

文章目录 前言KubeEdge云边通信方式云端架构设计EdgeController:云到边:边到云 DeviceController:云到边边到云 边缘端架构设计EdgedPod的管理部分Pod的监控部分Pod的卷管理Pod的垃圾回收Pod同步管理 MetaMangger从云到边缘的更新 (Update From Cloud To Edge)从边缘…

Covalent长期数据设施,支持基于 “blob” 、总锁仓54亿美元的L2

Covalent Network(CQT)是领先的历史数据可用性网络,通过其在 Web3 中超过 225 个区块链上的结构化数据基础设施,为数千名客户和开发人员提供支持。Covalent Network(CQT)正在与未来以太坊的进步需求相匹配&…

SQL慢查询学习篇

https://www.cnblogs.com/isyues/p/17733015.html 1. 对扫到的SQL慢查询语句执行 explain explain select task_id, channel, count(task_id) as count from tablename where send_time > "2024-05-10 16:13:59" and send_time < "2024-05-14 16:13:59…

api接口、api文档、api调试、api测试

应用程序接口是一组定义、程序及协议的集合&#xff0c;通过 API 接口实现计算机软件之间的相互通信。API 的一个主要功能是提供通用功能集。程序员通过调用 API 函数对应用程序进行开发&#xff0c;可以减轻编程任务。 API 同时也是一种中间件&#xff0c;为各种不同平台提供数…

展馆展厅设计施工流程

1、需求分析和确定&#xff1a; 与客户沟通&#xff0c;了解客户需求&#xff0c;对展馆展厅的用途、面积、功能、展品特点等进行分析&#xff0c;并确定设计方案。 2、方案设计 根据需求确定设计方案&#xff0c;包括平面布局、展品陈列、展示方式、照明等。设计师需要提供设计…

如何在Spring启动的时候执行一些操作

如何在Spring启动的时候执行一些操作 在Spring启动的时候执行一些操作有多种方式。你可以通过实现ApplicationRunner或者CommandLineRunner接口&#xff0c;在Spring Boot应用程序启动后执行特定操作。另外&#xff0c;你也可以使用PostConstruct注解&#xff0c;在Spring Bea…

【考研数学】张宇《1000题》强化阶段正确率多少算合格?

张宇1000题真的很练人心态.... 基础不好&#xff0c;建议别碰1000题 基础好&#xff0c;1000题建议在两个月以内刷完 如果自己本身在基础阶段学的比较水&#xff0c;自己的薄弱点刷了一小部分题没有针对性完全解决&#xff0c;转身去刷1000题就会发现&#xff0c;会的题目刷…

shell脚本-重定向与管道符

一、重定向 因为shell脚本有着批量操作的特殊性&#xff0c;大部分操作处于后台执行&#xff0c;不需要用户进行干预&#xff0c;所以提取、过滤并执行信息十分需要重定向和管道。重定向的意思是不输出到默认设备上&#xff0c;而是输出到你指定的位置&#xff08;文件、其他输…