编程导航第六关——白银挑战
编程导航第六关——白银挑战
树的层次遍历
- LeetCode102 题目要求:给你一个二叉树,请你返回其按层序遍历得到的节点值。(即逐层地,从左到右访问所有节点)。
- 思路:
- 我们根据队列的特点,先进先出;要实现全部节点的层次遍历,再次我们采用队列的数据结构,当队列中元素为空时,则代表树已被遍历完成,所以我们在循环时的条件就是quene.size>0
- 我们首先弹出元素,然后将该节点的子节点压入队列当中,这是,队列中的出队顺序就是层次遍历的顺序
- 在本题中,我们需要实现每一层元素值的分别记录,所以需要得到每一层对应的节点数是多少;
- 每一次的节点数就是队列的元素个数;只要出队,便是size-1,同时在出队时会将子节点压入队列中,当size==0时,那么这一层的元素已全部遍历完,同时此时队列中元素的个数,便是下一层的size
public List<List<Integer>> levelOrder(TreeNode root) {List<List<Integer>> result = new ArrayList<>();if (root == null) {return result;}Queue<TreeNode> queue = new LinkedList<>();queue.add(root);// 遍历条件while (queue.size() > 0) {int size = queue.size();final ArrayList<Integer> temp = new ArrayList<>();for (int i = 0; i < size; i++) {TreeNode peek = queue.poll();temp.add(peek.val);if (peek.left != null) {queue.add(peek.left);}if (peek.right != null) {queue.add(peek.right);}}result.add(temp);}return result;}
层次遍历——自底向上
- LeetCode 107.给定一个二叉树,返回其节点值自底向上的层序遍历。(即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)。
- 思路:
- 本题的解题思路与上题基本类似,区别在于最后的结果列表需要倒序返回,可采用链表的结构,每次向结果集中添加元素时,添加在链表的首位
public List<List<Integer>> levelOrderBottom(TreeNode root) {LinkedList<List<Integer>> result = new LinkedList<>();if (root == null) {return result;}Queue<TreeNode> queue = new LinkedList<TreeNode>();queue.add(root);while (queue.size() > 0) {int size = queue.size();ArrayList<Integer> temp = new ArrayList<>();for (int i = 0; i < size; i++) {TreeNode poll = queue.poll();temp.add(poll.val);if (poll.left != null) {queue.add(poll.left);}if (poll.right != null) {queue.add(poll.right);}}result.addFirst(temp);}return result;}
层次遍历——锯齿形遍历
- LeetCode103 题,要求是:给定一个二叉树,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
- 思路:
- 在实现层次遍历的基础上,对结果集中的列表选择元素的节点是在列表的末尾,还是列表的开头
- 如果是奇数层,在首位
- 如果是偶数层,在末尾
public List<List<Integer>> zigzagLevelOrder(TreeNode root) {ArrayList<List<Integer>> result = new ArrayList<>();if (root == null) {return result;}LinkedList<TreeNode> queue = new LinkedList<>();int cen = 1;queue.add(root);while (queue.size() > 0) {int size = queue.size();LinkedList<Integer> temp = new LinkedList<>();for (int i = 0; i < size; i++) {TreeNode poll = queue.poll();if (cen % 2 == 0) {temp.addFirst(poll.val);}else {temp.add(poll.val);}if (poll.left != null) {queue.add(poll.left);}if (poll.right != null) {queue.add(poll.right);}}result.add(temp);cen++;}return result;}
N叉树的遍历
- LeetCode429 给定一个 N 叉树,返回其节点值的层序遍历。(即从左到右,逐层遍历)。树的序列化输入是用层序遍历,每组子节点都由 null 值分隔(参见示例)。
public List<List<Integer>> levelOrder(Node root) {Queue<Node> nodes = new LinkedList<>();ArrayList<List<Integer>> result = new ArrayList<>();if (root == null) {return result;}nodes.add(root);while (nodes.size() > 0) {int size = nodes.size();ArrayList<Integer> temp = new ArrayList<>();for (int i = 0; i < size; i++) {final Node poll = nodes.poll();temp.add(poll.val);List<Node> children = poll.children;if (children != null) {for (int j = 0; j < children.size(); j++) {Node node = children.get(j);if (node != null) {nodes.add(node);}}}}result.add(temp);}return result;}
几个处理每层元素的题目
在每个树行中找最大值
- LeetCode 515题目要求:给定一棵二叉树的根节点 root ,请找出该二叉树中每一层的最大值。
- 思路:
- 使用层次遍历,定义每一层的第一个是最大值,遍历每一层的节点,找出最大值
public List<Integer> largestValues(TreeNode root) {final ArrayList<Integer> result = new ArrayList<>();Queue<TreeNode> queue = new LinkedList<>();if (root == null) {return result;}queue.add(root);while (queue.size() > 0) {int size = queue.size();int max=queue.peek().val;for (int i = 0; i < size; i++) {final TreeNode poll = queue.poll();if (poll.val>max){max=poll.val;}if (poll.left!=null){queue.add(poll.left);}if (poll.right!=null){queue.add(poll.right);}}result.add(max);}return result;}
在每个树行中找平均值
- LeetCode 637 要求给定一个非空二叉树, 返回一个由每层节点平均值组成的数组。
- 思路:同上
public List<Double> averageOfLevels(TreeNode root) {final ArrayList<Double> result = new ArrayList<>();Queue<TreeNode> queue = new LinkedList<>();if (root == null) {return result;}queue.add(root);while (queue.size() > 0) {int size = queue.size();ArrayList<Integer> temp = new ArrayList<>();for (int i = 0; i < size; i++) {final TreeNode poll = queue.poll();temp.add(poll.val);if (poll.left != null) {queue.add(poll.left);}if (poll.right != null) {queue.add(poll.right);}}
// 计算平均值double sum = 0;for (int i = 0; i < temp.size(); i++) {sum += temp.get(i);}double average = sum / temp.size();result.add(average);}return result;}
二叉树的右视图
- LeetCode 199题目要求是:给定一个二叉树的根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。
- 思路:
- 本质上是取每层最后一个元素到结果集中,采取层次遍历的方法,具体思路同上
public List<Integer> rightSideView(TreeNode root) {ArrayList<Integer> result = new ArrayList<>();Queue<TreeNode> queue = new LinkedList<>();if (root == null) {return result;}queue.add(root);while (queue.size() > 0) {int size = queue.size();for (int i = 0; i < size; i++) {TreeNode node = queue.poll();if (node.left != null) {queue.add(node.left);}if (node.right != null) {queue.add(node.right);}if (i == size - 1) {result.add(node.val);}}}return result;}
最底层 最左边
- Offer II 045.给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。
- 思路:
- 层次遍历最后一个输出的元素是最右边,最底部;
- 要获取最左边,最底部,翻转每次元素节点,实现每层从右往左遍历
- 返回值的条件便是,当最后一个节点弹出时(队列为空时)返回该节点的值
public int findBottomLeftValue(TreeNode root) {
// ArrayList<Integer> result = new ArrayList<>();Queue<TreeNode> queue = new LinkedList<>();if (root == null) {return 0;}queue.add(root);while (queue.size() > 0) {int size = queue.size();for (int i = 0; i < size; i++) {TreeNode node = queue.poll();if (node.right != null) {queue.add(node.right);}if (node.left != null) {queue.add(node.left);}if (queue.size() == 0) {return node.val;}}}return 0;}
相关文章:
编程导航第六关——白银挑战
编程导航第六关——白银挑战 树的层次遍历 LeetCode102 题目要求:给你一个二叉树,请你返回其按层序遍历得到的节点值。(即逐层地,从左到右访问所有节点)。思路: 我们根据队列的特点,先进先出;要实现全部节…...
743. 网络延迟时间
有 n 个网络节点,标记为 1 到 n。 给你一个列表 times,表示信号经过 有向 边的传递时间。 times[i] (ui, vi, wi),其中 ui 是源节点,vi 是目标节点, wi 是一个信号从源节点传递到目标节点的时间。 现在,…...
Kubernetes高可用集群二进制部署(四)部署kubectl和kube-controller-manager、kube-scheduler
Kubernetes概述 使用kubeadm快速部署一个k8s集群 Kubernetes高可用集群二进制部署(一)主机准备和负载均衡器安装 Kubernetes高可用集群二进制部署(二)ETCD集群部署 Kubernetes高可用集群二进制部署(三)部署…...
在CSDN学Golang场景化解决方案(微服务架构设计)
一,聚合器微服务设计模式 在Golang微服务架构设计中,聚合器(Aggregator)微服务设计模式是一种常见的应用程序体系结构模式。该模式旨在简化客户端与后端微服务之间的通信,并支持更高级别的操作,例如聚合多…...
centos7 yum安装mysql5.7
卸载mysql 以下指令查看是否安装过 rpm -qa | grep -i mysql 如果发现已经安装,需要卸载了再安装(据说,这样的卸载是不彻底的。) rpm -e mysql 卸载 mariadb yum -y remove mariadb-libs-1:5.5.68-1.el7.x86_64 下载和安装mys…...
安防视频汇聚平台EasyCVR视频广场面包屑侧边栏支持拖拽操作
智能视频监控平台EasyCVR能在复杂的网络环境中,将海量设备实现集中统一接入与汇聚管理,实现视频的处理与分发、录像与存储、按需调阅、平台级联等。 TSINGSEE青犀视频汇聚平台EasyCVR可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协…...
爬虫007_python中的输出以及格式化输出_以及输入---python工作笔记025
首先看输出 输出这里,注意不能直接上面这样,18需要转换成字符串 可以看到python中这个字符串和数字一起的时候,数字要转换一下成字符串. 然后这里要注意%s 和%d,这个s指的是字符串,d指的是数字 注意后面的内容前面要放个% ,然后多个参数的话,那么这里用(),里面用,号隔开 然…...
485modbus转profinet网关连三菱变频器modbus通讯触摸屏监控
本案例介绍了如何通过485modbus转profinet网关连接威纶通与三菱变频器进行modbus通讯。485modbus转profinet网关提供了可靠的连接方式,使用户能够轻松地将不同类型的设备连接到同一网络中。通过使用这种网关,用户可以有效地管理和监控设备,从…...
话费充值接口文档
话费充值接口文档 接口版本:1.0 ―、引言 文档概述 本文档提供话费充值接口规范说明,提供一整套的完整的接入示例(http 接口)供商户参 考,可以帮助商户开发人员快速完成接口开发与联调,实现与话费充值系统的交易互联。 公司官网…...
windows系统的IP、路由、网关、内外网同时访问路由以及修改系统文件hosts的配置
当我们刚刚入职一家公司的时候、一般公司会给我下发一个ip地址和mac地址、还有访问一些公司的平台需要修改hosts之后的路由配置、以及第一次配置内网、如何内外网同时上网。 目录 一、ip的配置 1.1、IP的配置 1.2、mac地址的配置 1.3、内外网路由的配置(w11系统需…...
Kubespray-offline v2.21.0-1 下载 Kubespray v2.22.1 离线部署 kubernetes v1.25.6
文章目录 1. 目标2. 预备条件3. vcenter 创建虚拟机4. 系统初始化4.1 配置网卡4.2 配置主机名4.3 内核参数 5. 打快照6. 安装 git7. 配置科学8. 安装 docker9. 下载介质9.1 下载安装 docker 介质9.2 下载 kubespray-offline-ansible 介质9.3 下载 kubernetes 介质 10. 搬运介质…...
代码随想录训练营Day59单调栈Part01|739. 每日温度|496.下一个更大元素①
单调栈 单调栈应用场景:找当前元素左边/右边比当前元素大/小的第一个元素什么是单调栈:保证栈里面的元素递增/递减(需要自己定义)栈内保存什么:存入下标如何比较大小:栈和数组做映射递增?递减&…...
RPMsg-Lite上手
文章目录 1、rpmsg-lite介绍2、rpmsg-lite 应用 现在的芯片非常复杂,很多都是包含多个核,特别是片上系统(SoC),一颗芯片上不仅包含了很多个核心,并且很多核心都是异构的。 为了最大限度的发挥他们的性能&am…...
基于YOLOv8 的 多边形区域内目标检测,跟踪,计数
文章大纲 使用OpenCV 进行多边形 角点获取yolov5 的样例实现基于 roboflow 开源库的实现roboflow 开源库 介绍基于YOLOv8 track 的 Polygon Zone 计数参考文献与学习路径自己实现使用 开源库使用OpenCV 进行多边形 角点获取 import cv2 def SetPoints(windowname, img):"…...
STSP中用于记录节点和旅行回路的四种数据结构
STSP中用于记录节点和旅行回路的四种数据结构 双链表结构2-level tree卫星结构k-level卫星结构树参考文献 对于TSP是是历史悠久的研究问题,直至现在已经有了很多成熟高效的算法来求解问题。在拥有好的求解算法的同时,优秀的数据结构可以同时大幅提升问题…...
【Spring】AOP切点表达式
文章目录 1、语法2、通配符3、execution4、within5、annotation6、args7、args8、bean9、this10、target11、target12、within13、表达式组合14、补充 1、语法 动作关键词(访问修饰符 返回值 包名.类/接口名 .方法名(参数)异常名) 举例: execution(public User c…...
设计模式再探——代理模式
目录 一、背景介绍二、思路&方案三、过程1.代理模式简介2.代理模式的类图3.代理模式代码4.代理模式还可以优化的地方5.代理模式的项目实战,优化后(只加了泛型方式,使用CGLIB的代理) 四、总结五、升华 一、背景介绍 最近在做产品过程中对于日志的统一…...
MySQL日志——查询日志
1.查询日志 show variables like %general%;修改mysql的配置文件 /etc/my.cnf文件,添加如下内容: #该选项用来开启查询日志,可选值:0或者1;0代表关闭,1代表开启 general_log1 #设置日志的文件名࿰…...
Java版本工程行业管理系统源码-专业的工程管理软件-提供一站式服务 em
工程项目管理软件(工程项目管理系统)对建设工程项目管理组织建设、项目策划决策、规划设计、施工建设到竣工交付、总结评估、运维运营,全过程、全方位的对项目进行综合管理 工程项目各模块及其功能点清单 一、系统管理 1、数据字典&#…...
pytorch的CrossEntropyLoss交叉熵损失函数默认是平均值
pytorch中使用nn.CrossEntropyLoss()创建出来的交叉熵损失函数计算损失默认是求平均值的,即多个样本输入后获取的是一个均值标量,而不是样本大小的向量。 net nn.Linear(4, 2) loss nn.CrossEntropyLoss() X torch.rand(10, 4) y torch.ones(10, dt…...
简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...
深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...
pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)
目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关࿰…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...
学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...
九天毕昇深度学习平台 | 如何安装库?
pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...
Fabric V2.5 通用溯源系统——增加图片上传与下载功能
fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...
