【leetcode热题】 二叉树的右视图

给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。

示例 1:

输入: [1,2,3,null,5,null,4]
输出: [1,3,4]

示例 2:

输入: [1,null,3]
输出: [1,3]

示例 3:

输入: []
输出: []

解法一

题目意思再说的直白一些,就是依次输出二叉树每层最右边的元素。

每层最右边,可以想到二叉树的层次遍历,我们只需要保存每层遍历的最后一个元素即可。

二叉树的层次遍历在 102 题 已经做过了,代码拿过来用就可以。

我们只需要用一个队列,每次保存下层的元素即可。

public List<Integer> rightSideView(TreeNode root) {Queue<TreeNode> queue = new LinkedList<TreeNode>();List<Integer> res = new LinkedList<>();if (root == null)return res;queue.offer(root);while (!queue.isEmpty()) {int levelNum = queue.size(); // 当前层元素的个数for (int i = 0; i < levelNum; i++) {TreeNode curNode = queue.poll();//只保存当前层的最后一个元素if (i == levelNum - 1) {res.add(curNode.val);}if (curNode.left != null) {queue.offer(curNode.left);}if (curNode.right != null) {queue.offer(curNode.right);}}}return res;
}

解法二

解法一的层次遍历是最直接的想法。我们也可以用深度优先遍历,在 这里) 看到的。

二叉树的深度优先遍历在之前也讨论过了, 94 题 的中序遍历、 144 题 的先序遍历以及 145 题 的后序遍历。

这里采用最简单的递归写法,并且优先从右子树开始遍历。

用一个变量记录当前层数,每次保存第一次到达该层的元素。

public List<Integer> rightSideView(TreeNode root) {List<Integer> res = new LinkedList<>();rightSideViewHelper(root, 0, res);return res;
}private void rightSideViewHelper(TreeNode root, int level, List<Integer> res) {if (root == null) {return;}//res.size() 的值理解成当前在等待的层级数//res.size() == 0, 在等待 level = 0 的第一个数//res.size() == 1, 在等待 level = 1 的第一个数//res.size() == 2, 在等待 level = 2 的第一个数if (level == res.size()) {res.add(root.val);}rightSideViewHelper(root.right, level + 1, res);rightSideViewHelper(root.left, level + 1, res);
}

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

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

相关文章

Android 最新权限请求利器----PermissonX

目前项目已经慢慢的迁移到了kotlin语言&#xff0c;基于kotlin协程很容易编写出漂亮的异步结构代码&#xff0c;而由于协程天然自带挂起属性&#xff0c;所以我们的项目中移除了对rxjava的依赖&#xff0c;而对于权限申请一直没有特别好的替代产品&#xff0c;所以写了这个Perm…

【idea做lua编辑器】IDEA下lua插件报错编辑器打不开(同时安装EmmyLua和Luanalysis这2个插件就报错,保留EmmyLua插件即可)

C:\Users\Administrator\AppData\Roaming\JetBrains\IntelliJIdea2021.1\plugins 同时安装EmmyLua和Luanalysis就报错&#xff0c;删除Luanalysis这个文件夹只使用EmmyLua这个插件即可&#xff01; 为啥不用vscode呢&#xff1f; 我个人不太喜欢vscode&#xff0c;更喜欢idea&…

InstructGPT的流程介绍

1. Step1&#xff1a;SFT&#xff0c;Supervised Fine-Tuning&#xff0c;有监督微调。顾名思义&#xff0c;它是在有监督&#xff08;有标注&#xff09;数据上微调训练得到的。这里的监督数据其实就是输入Prompt&#xff0c;输出相应的回复&#xff0c;只不过这里的回复是人工…

element-ui checkbox 组件源码分享

简单分享 checkbox 组件&#xff0c;主要从以下三个方面来分享&#xff1a; 1、组件的页面结构 2、组件的属性 3、组件的方法 一、组件的页面结构 二、组件的属性 2.1 value / v-model 属性&#xff0c;绑定的值&#xff0c;类型 string / number / boolean&#xff0c;无…

MySQL事务隔离级别及MVCC详解

MySQL的事务隔离级别及特性如下&#xff1a; SERIALIZABLE&#xff08;串行化&#xff09;&#xff1a;无问题&#xff0c;性能差&#xff1b; REPEATABLE-READ&#xff08;可重复读&#xff09;&#xff1a;幻读&#xff0c;默认隔离级别&#xff1b; READ-COMMITTED&#xf…

Spring单元测试+Mockito

一&#xff0c;背景 单元测试基本上是开发逃不过的一个工作内容&#xff0c;虽然往往因为过于无聊&#xff0c;或者过于麻烦&#xff0c;而停止于项目的迭代之中&#xff0c;不了了之了。其实不是开发们懒&#xff0c;而是上头要求的测试覆盖率高&#xff0c;但是又没有好用的…

Stable Diffusion 本地训练端口与云端训练端口冲突解决办法

方法之一&#xff0c;修改本地训练所用的端口 1 首先&#xff0c;进入脚本训练器的根目录 例如&#xff1a;C:\MarkDeng\lora-scripts-v1.7.3 找到gui.py 2 修改端口号 因为云端训练器也是占用28000和6006端口 那么本地改成27999和6007也是可以的 保存退出&#xff0c;运行启动…

深度学习 (线性回归 简洁实现)

介绍: 在线性神经网络中&#xff0c;线性回归是一种常见的任务&#xff0c;用于预测一个连续的数值输出。其目标是根据输入特征来拟合一个线性函数&#xff0c;使得预测值与真实值之间的误差最小化。 线性回归的数学表达式为&#xff1a; y w1x1 w2x2 ... wnxn b 其中&…

扩展一下BenchmarkSQL,新增支持ASE/HANA/DB2/SQLServer,可以随便用了

1 背景 提到数据库的性能,自然就避不开性能测试。有专用于测试OLTP的,也有偏重于OLAP的。本文介绍的BenchmarkSQL就属于测试OLTP中的一个,基于TPCC的。网上有很多介绍TPC*的相关测试的文章,大家可以自行脑补。而PostgreSQL自带的pgbench是属于TPCC的前一个基准测试程序,偏…

STM32/GD32——自己制定协议和解析协议数据(可能随时弃坑)

温馨提醒&#xff1a; 由于我最害怕的就是接触各种新协议&#xff0c;尤其是对各种协议和解析协议数据简直就是职业生涯的噩梦&#xff0c;但工作中不免和不同的协议打交道。本着要啃就啃最难的&#xff0c;大不了放弃的心态。所以我学习了如何自定义制定自己的协议&#xff0c…

机器学习基础知识面经(个人记录)

朴素贝叶斯 特征为理想状态下的独立同分布&#xff0c;作为机器学习的重要基石和工具 由贝叶斯公式推导而来 是后验概率&#xff1a;在B发生的条件下A发生的概率。 是似然概率: 在 发生的条件下 发生的概率。 是先验概率: 发生的概率&#xff0c;而不考虑 的影响。 是…

【PyQt】17.1-日历控件 不同风格的日期和时间、以及高级操作

日历控件puls版本 前言一、日历控件中不同风格的日期和时间1.1 代码1.2 注意事项格式设置m的大小写问题QTime和QDateTime的区别 1.3 运行结果 二、高级操作2.1 成倍调整2.2 下拉出日历2.3 事件函数2.4 获取设置的日期和时间 完整代码 前言 1、不同风格的日期和时间展示 2、高级…

uni-app里面如何使用图标

目录 一、导入 1.在官方&#xff08;iconfont-阿里巴巴矢量图标库&#xff09;选择自己想要的图标&#xff0c;加入购物车 2. 在点击购物车下载代码 3.解压文件夹 并更改名字 4.将文件夹&#xff08;iconfont&#xff09;整个放到项目中的static中 5.修改iconfont.css文件…

上位机开发 halcon坐标转轴坐标

背景 上位机开发中有一种相机叫标定相机,主要是有来给某些要进行根据CAD图点位计算时当前产品实际点位坐标时使用的一种标定测量相机。主要原理是根据两个或多个指定的标定点进行取图计算圆心坐标,再将视觉计算出的圆心坐标和取图时的轴坐标进行偏差计算。最后得到标定点轴的…

2024年3月24日暴富榜

子丑寅卯辰巳午未申酉戌亥 每天一读&#xff0c;《小飞生肖》运势&#xff0c; 让您的生活更美好&#xff01; 鼠&#xff1a;生肖暴富榜《中暴富》 鼠&#xff1a;红榜衣服颜色&#xff08;蓝色&#xff09; 牛&#xff1a;生肖暴富榜《中暴富》 牛&#xff1a;红榜衣服颜色…

超越工具的限制!菜鸟工具箱帮你节省时间

在这个飞速发展的时代&#xff0c;我们越来越依赖各种工具来提高工作效率和解决问题。然而&#xff0c;你是否意识到&#xff0c;有些工具不仅仅是工具&#xff0c;它们还能为你带来更多的可能性和机遇&#xff1f;菜鸟工具箱就是这样一个超越工具本身的存在&#xff01; 菜鸟工…

目标检测的指标评估

目标检测模型的评价指标主要用于衡量模型的性能&#xff0c;特别是它在定位和识别目标方面的准确性。以下是一些常见的评价指标&#xff1a; 1. 精确度 (Precision): 表示检测到的目标中&#xff0c;正确检测到的目标所占的比例。精确度高意味着模型产生的误报&#xff08;错误…

腾讯云GPU服务器介绍_GPU实例规格价格_AI_深度学习

腾讯云GPU服务器是提供GPU算力的弹性计算服务&#xff0c;腾讯云GPU服务器具有超强的并行计算能力&#xff0c;可用于深度学习训练、科学计算、图形图像处理、视频编解码等场景&#xff0c;腾讯云百科txybk.com整理腾讯云GPU服务器租用价格表、GPU实例优势、GPU解决方案、GPU软…

洛谷 Cut Ribbon

思路&#xff1a;我们可以看出&#xff0c;这是一道完全背包问题&#xff0c;但是呢&#xff0c;有一点需要注意&#xff1a;那就是我们在装背包的时候并不能保证一定能装满背包&#xff0c;但是这里的背包要求是让我们装满的&#xff0c;所以我们需要判断这个背包装满才行&…

Linux之文件系统与软硬链接

前言 我们之前阐述的内容都是在文件打开的前提下, 但是事实上不是所有文件都是被打开的, 且大部分文件都不是被打开的(也就是文件当前并不需要被访问), 都在磁盘中进行保存. 那这些没有被(进程)打开的文件, 也是需要被管理的! 对于这部分文件核心工作之一是能够快速定位文件…