编程导航第六关——白银挑战
编程导航第六关——白银挑战
树的层次遍历
- 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…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...
K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...
初探Service服务发现机制
1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源…...
Java数值运算常见陷阱与规避方法
整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...
GitHub 趋势日报 (2025年06月06日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...
ubuntu22.04有线网络无法连接,图标也没了
今天突然无法有线网络无法连接任何设备,并且图标都没了 错误案例 往上一顿搜索,试了很多博客都不行,比如 Ubuntu22.04右上角网络图标消失 最后解决的办法 下载网卡驱动,重新安装 操作步骤 查看自己网卡的型号 lspci | gre…...
6.9-QT模拟计算器
源码: 头文件: widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QMouseEvent>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent nullptr);…...
