【数据结构与算法 | 队列篇】力扣102, 107

1. 力扣102 : 二叉树的层序遍历

(1). 题

给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。

示例 1:

fbf1c4f33ddc948c764e9c9237acd91c.jpeg

输入:root = [3,9,20,null,null,15,7]
输出:[[3],[9,20],[15,7]]

示例 2:

输入:root = [1]
输出:[[1]]

示例 3:

输入:root = []
输出:[]

提示:

  • 树中节点数目在范围 [0, 2000] 内
  • -1000 <= Node.val <= 1000

(2). 思路

由题,可知方法返回一个集合,该集合的元素仍然是一个集合. 该题需要用到队列数据结构.如果二叉树是空树,直接返回空集合. 如果不是,则将根节点入队.由于根节点在队列中,将size初始化为1,n的作用则是用于更新size.while循环,只要队列不为空,那么就new一个集合,for循环依次出队,并将出队的节点的值add到集合中收集起来,如果其有左孩子或右孩子,则将该孩子节点入队,并将n++. 一次循环结束时,将小集合add入大集合中.

(3). 解

class Solution {public List<List<Integer>> levelOrder(TreeNode root) {List<List<Integer>> bl = new ArrayList<>();Deque<TreeNode> deque = new LinkedList<>();if(root == null) {return bl;}deque.offer(root);int size = 1;int n = 0;//只要队列不为空while(!deque.isEmpty()) {List<Integer> l = new ArrayList<>();for(int i =0 ; i < size; i++) {TreeNode tn = deque.poll();l.add(tn.val);if(tn.left != null) {deque.offer(tn.left);n++;}if(tn.right != null) {deque.offer(tn.right);n++;}}size = n;n = 0;bl.add(l);}return bl;}
}

2. 力扣107 : 二叉树的层序遍历2

(1). 题

给你二叉树的根节点 root ,返回其节点值 自底向上的层序遍历 。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)

示例 1:

d247066a47d3d1cfeceba712880b907d.jpeg

输入:root = [3,9,20,null,null,15,7]
输出:[[15,7],[9,20],[3]]

示例 2:

输入:root = [1]
输出:[[1]]

示例 3:

输入:root = []
输出:[]

提示:

  • 树中节点数目在范围 [0, 2000] 内
  • -1000 <= Node.val <= 1000

(2). 思路

该题与力扣102题同源,只不过最后处理的时候多了一个出栈入栈的操作而已. 所以完全可以将102题的代码复制粘贴过来,然后添加一个栈结构,while循环中,不是直接将小集合添加到大集合中,而是做一个压栈的操作.while循环结束以后,将栈中元素全部弹出,add入大集合,将其返回即可.

(3). 解

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public List<List<Integer>> levelOrderBottom(TreeNode root) {List<List<Integer>> bl = new ArrayList<>();Deque<TreeNode> deque = new LinkedList<>();Deque<List<Integer>> stack = new LinkedList<>();if(root == null) {return bl;}deque.offer(root);int size = 1;int n = 0;//只要队列不为空while(!deque.isEmpty()) {List<Integer> l = new ArrayList<>();for(int i =0 ; i < size; i++) {TreeNode tn = deque.poll();l.add(tn.val);if(tn.left != null) {deque.offer(tn.left);n++;}if(tn.right != null) {deque.offer(tn.right);n++;}}size = n;n = 0;stack.push(l);}while(!stack.isEmpty()) {bl.add(stack.pop());}return bl;}
}

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

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

相关文章

C# 编程基础:注释、变量、常量、数据类型和自定义类型

C# 是一种功能强大的面向对象编程语言&#xff0c;它提供了丰富的特性来帮助开发者编写清晰、高效的代码。本文将介绍C#中的注释、变量、常量、基本数据类型以及如何创建和使用自定义类型。 注释 注释用于解释代码的目的&#xff0c;它们不会被程序执行。 单行注释使用 //。…

动手学深度学习(Pytorch版)代码实践-深度学习基础-01基础函数的使用

01基础函数的使用 主要内容 张量操作&#xff1a;创建和操作张量&#xff0c;包括重塑、填充、逐元素操作等。数据处理&#xff1a;使用pandas加载和处理数据&#xff0c;包括处理缺失值和进行one-hot编码。线性代数&#xff1a;包括矩阵运算、求和、均值、点积和各种范数计算…

STM32FLASH闪存

文章目录 前言首先来回顾一下存储器映像FLASH简介闪存模块组织Flash基本结构&#xff08;关系&#xff09;图Flash解锁使用指针访问存储器FLASH操作Flash全擦除Flash页擦除Flash写入 选项字节选项字节操作选项字节擦除选项字节写入 器件电子签名注意闪存控制寄存器一览 前言 本…

[leetcode hot 150]第一百九十一题,位1的个数

题目&#xff1a; 编写一个函数&#xff0c;输入是一个无符号整数&#xff08;以二进制串的形式&#xff09;&#xff0c;返回其二进制表达式中设置位的个数&#xff08;也被称为汉明重量&#xff09;。 这道题比较简单&#xff0c;直接对最后一位进行与1的与操作&#xff0c;然…

Shell 编程之正则表达式与文本处理器

一、正则表达式 1.1 正则表达式概述 1. 正则表达式的定义 正则表达式又称正规表达式、常规表达式。在代码中常简写为 regex 、 regexp 或 RE 。 正则表达式是使用单个字符串来描述、匹配一系列符合某个句法规则的字符串&#xff0c;简单来说&#xff0c; 是一种匹配字符串…

RTPS协议之Messages Module

目录 Messages ModuleType定义RTPS消息结构RTPS消息头子消息结构 RTPS消息接收者SubmessageElementsRTPS HeaderRTPS Submessages Messages Module RTPS Writer和RTPS Reader之间的交换数据的消息。 Type定义 TypePurposeProtocolId_tSubmessageFlagsub msg flagSubmessageK…

第16章-超声波跟随功能 基于STM32的三路超声波自动跟随小车 毕业设计 课程设计

第16章-超声波跟随功能 无PID跟随功能 //超声波跟随if(HC_SR04_Read() > 25){motorForward();//前进HAL_Delay(100);}if(HC_SR04_Read() < 20){motorBackward();//后退HAL_Delay(100);}PID跟随功能 在pid.c中定义一组PID参数 tPid pidFollow; //定距离跟随PIDpidFol…

越来越多的连锁企业选择开源连锁收银系统

连锁企业的收银系统作为其信息化的基础&#xff0c;随着运营的复杂化&#xff0c;越来越多的连锁企业选择开源连锁收银系统来满足其日常经营需要。商淘云为大家分享连锁企业选择开源连锁收银系统的三大原因&#xff0c;大家点赞收藏。 首先是灵活性和定制性强&#xff0c;连锁企…

网络故障与排除(一)

一、Router-ID冲突导致OSPF路由环路 路由器收到相同Router-ID的两台设备发送的LSA&#xff0c;所以查看路由表看到的OSPF缺省路由信息就会不断变动。而当C1的缺省路由从C2中学到&#xff0c;C2的缺省路由又从C1中学到时&#xff0c;就形成了路由环路&#xff0c;因此出现路由不…

登录安全分析报告:小米官网注册

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞 …

重学java 51.Collections集合工具类、泛型

"我已不在地坛&#xff0c;地坛在我" —— 《想念地坛》 24.5.28 一、Collections集合工具类 1.概述:集合工具类 2.特点: a.构造私有 b.方法都是静态的 3.使用:类名直接调用 4.方法: static <T> boolean addAll(collection<? super T>c,T... el…

转本人自救指南(上岸之后才敢说的大实话)

专转本的宝子们&#xff0c;一定不要慌&#xff0c;越慌越容易出错&#xff01; 英语一定要早早的准备。背英语单词要一直要坚持&#xff0c;大家要坚持&#xff01;东西要背&#xff01;要坚持做作业&#xff01;每天的坚持和计划很重要&#xff01; 不要把最后的考试题想的太…

Nginx教程(持续更新中~)

浏览器优先查看host文件中的映射&#xff0c;如果host中没有就会从网上CDN找该域名对应的ip,但是目前使用的www.123.com是外卖假设的&#xff0c;CDN中并没有&#xff0c;所以就采用host中填写 第二种weight: 第三种 ip_hash: 第四种 fair: ​​​​​​

常见webshell工具及特征分析

前言 在工作中经常会遇到各种websehll&#xff0c;黑客通常要通过各种方式获取 webshell&#xff0c;从而获得企业网站的控制权&#xff0c;识别出webshell文件或通信流量可以有效地阻止黑客进一步的攻击行为&#xff0c;下面以常见的四款webshell进行分析&#xff0c;对工具连…

【python 进阶】pandas-datetime

官网链接 https://pandas.pydata.org/docs/user_guide/timeseries.html#timeseries-holiday 将时间变成 datetime 格式 df[datetime] pd.to_datetime(df[time])将datetime 列设置为索引&#xff0c;后续才能进行resample 之类的操作 df df.set_index(datetime)按月进行统…

检测头篇 | YOLOv8改进之添加小目标检测头 / 添加大目标检测头 / 减少检测头

前言:Hello大家好,我是小哥谈。本文首先给大家展示原始YOLOv8的网络结构图,然后再对其进行改变,即增加小目标检测头、增加大目标检测头和减少检测头。🌈 目录 🚀1.网络结构图

金融行业专题|超融合对国密卡和国产加密技术的支持能力如何?

目前&#xff0c;不少金融机构都使用国密卡&#xff08;满足国密算法要求的加密卡&#xff09;和国产密码解决方案保障金融信息安全。而在传统虚拟化架构下&#xff0c;单块加密卡通常只能服务一个系统&#xff0c;经常会出现资源利用率低、加密处理性能不足等问题&#xff0c;…

C++中的各种定义

文章目录 前言一、1、unsigned2、_countof、sizeof 总结 前言 一、 1、unsigned 在C语言中&#xff0c;"unsigned"是一个数据类型修饰符&#xff0c;用于修饰整数类型&#xff0c;表示该类型的变量只能存储非负整数&#xff0c;即无符号整数。它可以应用于char、s…

【杂记-浅谈ARP地址解析协议】

1、什么是ARP ARP&#xff0c;Address Resolution Protocol地址解析协议&#xff0c;ARP协议将IP地址解析为MAC地址。主机或三层网络设备上会维护一张ARP表&#xff0c;用于存储IP地址和MAC地址的映射关系&#xff0c;一般ARP表项包括动态ARP表项和静态ARP表项。 2、为什么需…

查看环境中python3安装在哪指令

1. 查看安装在哪&#xff1a; pip install where where python3 2. 查看是否安装&#xff1a; pip freeze | grep transformers