【专项刷题】— 队列

news2024/9/25 9:39:42

1、N 叉树的层序遍历 - 力扣(LeetCode)

思路:

  1. 每次遍历一层节点的时候就把当前节点的值添加到列表中
  2. 再将当前层的节点的子节点添加到队列中
  3. 每次遍历完一层之后就添加到总表中
  4. 代码:
    public List<List<Integer>> levelOrder(Node root) {
            List<List<Integer>> ret = new ArrayList<>();
            if(root == null){
                return ret;
            }
            Queue<Node> q = new LinkedList<>();
            q.offer(root);
            while(!q.isEmpty()){
                //存储每一层的节点值
                List<Integer> tmp = new ArrayList<>();
                int n = q.size();
                for(int i = 0; i < n; i++){
                    Node t = q.poll();
                    tmp.add(t.val);
                    //让孩子节点入队
                    for(Node child : t.children){
                        if(child != null){
                            q.offer(child);
                        }
                    }
                }
                ret.add(tmp);
            }
            return ret;
        }

 2、二叉树的锯齿形层序遍历 - 力扣(LeetCode)

思路:

  1. 只需创建一个标记位,偶数行的时候逆序节点的值即可,逻辑和层序遍历一致
  2. 代码:
    public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
            List<List<Integer>> ret = new ArrayList<>();
            if(root == null){
                return ret;
            }
            Queue<TreeNode> q = new LinkedList<>();
            q.offer(root);
            int dev = 1;
            while(!q.isEmpty()){
                List<Integer> tmp = new ArrayList<>();
                //每一层的节点个数,遍历的次数
                int n = q.size();
                for(int i = 0; i < n; i++){
                    TreeNode t = q.poll();
                    tmp.add(t.val);
                    if(t.left != null){
                       q.offer(t.left);
                    }
                    if(t.right != null){
                        q.offer(t.right);
                    }
                }
                if(dev % 2 == 0){
                    Collections.reverse(tmp);
                }
                ret.add(tmp);
                dev++;
            }
            return ret;
        }

 3、二叉树最大宽度 - 力扣(LeetCode)

思路:

  1. 将每个节点的下标都表示出来,最大宽度就是一头一尾相减
  2. 使用数组表示队列
  3. 代码:
    public int widthOfBinaryTree(TreeNode root) {
            //数组模拟队列
            List<Pair<TreeNode,Integer>> q = new ArrayList<>();
            //添加到表中,还有节点下标
            q.add(new Pair<TreeNode,Integer>(root,1));
            //记录最终结果
            int ret = 0;
    
            while(!q.isEmpty()){
                //更新一下这一层的宽度
                Pair<TreeNode,Integer> t1 = q.get(0);
                Pair<TreeNode,Integer> t2 = q.get(q.size() - 1);
                ret = Math.max(ret,t2.getValue() - t1.getValue() + 1);
    
                //下一层进队,新建一个表,然后再覆盖原表,模拟出队操作
                List<Pair<TreeNode,Integer>> tmp = new ArrayList<>();
                for(Pair<TreeNode,Integer> t : q){
                    //当前节点的值
                    TreeNode node = t.getKey();
                    //当前节点下标
                    int index = t.getValue();
                    if(node.left != null){
                        tmp.add(new Pair<TreeNode,Integer>(node.left, index * 2));
                    }
                    if(node.right != null){
                        tmp.add(new Pair<TreeNode,Integer>(node.right, index * 2 + 1));
                    }
                }
                q = tmp;
            }
            return ret;
        }

4、在每个树行中找最大值 - 力扣(LeetCode)

思路:

  1. 只需在每次层序遍历的时候,找出每一层的最大值即可
  2. 代码:
    public List<Integer> largestValues(TreeNode root) {
            List<Integer> ret = new ArrayList<>();
            if(root == null){
                return ret;
            }
            Queue<TreeNode> q = new LinkedList<>();
            q.offer(root);
            while(!q.isEmpty()){
                int tmp = Integer.MIN_VALUE;
                //当前层数节点的个数
                int n = q.size();
                //遍历该层的每一个节点,并将其子节点添加到队列中
                for(int i = 0; i < n; i++){
                    TreeNode t = q.poll();
                    //更新最大值
                    tmp = Math.max(tmp, t.val);
                    if(t.left != null){
                        q.offer(t.left);
                    }
                    if(t.right != null){
                        q.offer(t.right);
                    }
                }
                ret.add(tmp);
            }
            return ret;
        }

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

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

相关文章

如何远程实时监控员工的电脑屏幕?远程桌面监控的五个可实现方法分享

想象一下&#xff0c;你在办公室喝着咖啡&#xff0c;员工的电脑屏幕却在数百公里之外实时呈现在你的眼前。你可以看到他们在干什么&#xff0c;是埋头工作还是悄悄摸鱼&#xff1f;远程桌面监控让这一切变得触手可及&#xff0c;简直像给了管理者一双“千里眼”&#xff01; 如…

RedisTemplate操作String的API

文章目录 1 String 介绍2 命令3 对应 RedisTemplate API❄️❄️ 3.1 添加缓存❄️❄️ 3.2 设置过期时间(单独设置)❄️❄️ 3.3 获取缓存值❄️❄️ 3.4 删除key❄️❄️ 3.5 顺序递增❄️❄️ 3.6 顺序递减 ⛄4 以下是一些常用的API⛄5 应用场景 1 String 介绍 String 类型…

9.10-AutoAWQ代码解析

1、首先要去官网下载源码。https://github.com/casper-hansen/AutoAWQ.githttps://github.com/casper-hansen/AutoAWQ.git 2、git clone后&#xff0c;下载AutoAWQ所需环境。 pip install -e . 3、查看quantize.py代码&#xff0c;修改model_path部分&#xff0c;修改为想要量…

系统架构师考试学习笔记第四篇——架构设计实践知识(19)嵌入式系统架构设计理论与实践

本章考点&#xff1a; 第19课时主要学习嵌入式系统架构设计的理论和工作中的实践。根据新版考试大纲&#xff0c;本课时知识点会涉及案例分析题&#xff08;25分&#xff09;。在历年考试中&#xff0c;案例题对该部分内容都有固定考查&#xff0c;综合知识选择题目中有固定分值…

您与该网站的连接不是私密连接,存在安全隐患

您与该网站的连接不是私密连接&#xff0c;存在安全隐患。 攻击者可能会试图窃取您的信息&#xff08;例如&#xff1a;密码、通讯内容或信用卡信息&#xff09;。为避免您的信息失窃&#xff0c;建议您停止访问该页面。了解详情 解决办法如下&#xff1a; 1、查看电脑时间&…

使用FastJson2将对象转成JSON字符串时,小数位“0”开头时转换出错

maven坐标&#xff1a; <dependency> <groupId>com.alibaba.fastjson2</groupId> <artifactId>fastjson2</artifactId> <version>2.0.40</version> </dependency> 问题现象&#xff1a; 问题原因&#xff1a; I…

IP路由选择

文章目录 1. 基本概念2. RIP(路由选择信息协议)3. OSPF 1. 基本概念 路由选择协议 路由选择协议让路由器能够动态地发现互联网络&#xff0c;并确保所有路由器的路由选择表都相同。路由选择协议还用于找出最佳路径&#xff0c;让分组穿越互联网络前往目的地的效率最高。RIP、R…

领夹麦克风哪个品牌好?无线领夹麦克风品牌大全,麦克风推荐

在这个全民直播、Vlog盛行的时代&#xff0c;一款轻便高效的无线领夹麦克风成了不少内容创作者的必备神器。但市面上产品五花八门&#xff0c;有的打着“超远传输、无损音质”的旗号&#xff0c;实则性能平平&#xff0c;甚至存在信号干扰、噪音大等问题&#xff0c;让人直呼交…

SpringBoot集成MyBatis-PlusDruid

目录 MyBatis-Plus简介 实例演示 创建Springboot项目 初始化Springboot项目 添加关键依赖 application.properties添加相关配置 启动类 编写实体类 编写mapper接口 条件构造器 分页插件 自定义 SQL 映射 MyBatis-Plus简介 MyBatis-Plus简介‌MyBatis-Plus‌&…

铁威马秋季新品即将上线,你想要的NAS我都有!

各位铁粉们&#xff0c;注意啦&#xff01; 一场关于存储的饕餮盛宴即将拉开帷幕 铁威马&#xff0c;带着九款全新力作NAS 将于9月19日席卷全球市场 是的&#xff0c;你没听错 九款&#xff01; 从入门级到专业级 从桌面型到机架式 全系搭载TOS 6 总有一款能击中你的心…

PCI 9054应用总结

1 PCI配置空间 1.1 BAR大小的确定 Linux kernel读取PCI BARn表示的内存长度时&#xff0c;先直接读取BARn的值&#xff0c;这个就是地址&#xff0c;然后再向BARn写入0xffff,ffff&#xff0c;再读取BARn的值就是需要的内存长度&#xff08;忽略bit3到bit0的处理&#xff09;&a…

微波无源器件 3 一种用于Ka频带双极化波束形成网络的双模三路功分器

摘要&#xff1a; 本文给出了一种用于Ka频带的双极化工作的双模3路功分器的设计和性能。对有着三个输出端口的平衡地很好的功分的TE10和TE01模式和27.5-30GHz上优于-23dB的输入匹配可以获得相似的性能。与双模定向耦合器相连结&#xff0c;此三路功分器对于双极化波束形成网络具…

【Go】Go语言介绍与开发环境搭建

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

Qt篇——Qt获取Windows电脑上所有外接设备的名称、物理端口位置等信息

我之前有发过一篇文章《Qt篇——获取Windows系统上插入的串口设备的物理序号》&#xff0c;文章中主要获取的是插入的USB串口设备的物理序号&#xff1b;而本篇文章则进行拓展&#xff0c;可以获取所有外接设备的相关信息&#xff08;比如USB摄像头、USB蓝牙、USB网卡、其它一些…

膨胀腐蚀操作opencv dilate膨胀白膨胀,erode腐蚀是黑吃白。主要针对二值图

效果&#xff1a; 代码&#xff1a; import cv2 import numpy as np from matplotlib import pyplot as pltif __name__ "__main__":h 10w 10data np.random.normal(0, 1, [h, w]) # sigma, 2*sigma, 3*sigma之间的数的比例分别为0.68&#xff0c; 0.96&#…

甲骨文新财报云基建营收同比增长45%,与亚马逊AWS合作,盘后涨超9%

KlipC报道&#xff1a;当地时间9月9日&#xff0c;数据库软件与云服务龙头甲骨文发布截止8月份的2025财年第一财季财报&#xff0c;财报显示&#xff0c;营业收入133亿美元&#xff0c;同比增长7%&#xff1b;净利润 29.29 亿美元&#xff0c;同比增长21.03%。盘后大涨超9%。 …

C++ 第一阶段(基础语法)

c初识 创建项目 编写“HelloWorld”代码 #include <iostream> using namespace std; int main() {cout << "Hello World!\n"; }注释 单行注释 //表述信息 多行注释 /*表述信息*/ 变量 作用:给一段指定的内存空间起名&#xff0c;方便操作这段内存 语…

Tensorflow2如何读取自制数据集并训练模型?-- Tensorflow自学笔记13

一. 如何自制数据集&#xff1f; 1. 目录结构 以下是自制数据集-手写数字集, 保存在目录 mnist_image_label 下 2. 数据存储格式 2.1. 目录mnist_train_jpeg_60000 下存放的是 60000张用于测试的手写数字 如 : 0_5.jpg, 表示编号为0&#xff0c;标签为5的图片 6_1.jpg, 表示…

DGV结构变异数据库下载及bedToBigBed+bigBedToBed转换

DGV结构变异数据库通常用来过滤检测的CNV、Indels等结构变异信息&#xff0c;以达到去除假阳性的目的。 下载的bedToBigBed和bigBedToBed为二进制程序&#xff0c;已编译好&#xff0c;可以直接使用。 1. 基础软件和文件下载 # bedToBigBed下载 wget http://hgdownload.soe.…

PMP--一、二、三模--分类--14.敏捷--技巧--DoDDoR

文章目录 技巧DoD&DoR 二模14.敏捷--术语表--完成的定义DoD--Definition of Done--是指一个项目什么时候可以被认为是“完成”的标准&#xff0c;它可以包括各种质量和功能的具体要求。--它是团队需要满足的所有标准的核对单&#xff0c;只有可交付成果满足该核对单才能视为…