图解LeetCode——199. 二叉树的右视图

news2024/9/24 19:16:51

一、题目

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

二、示例

2.1> 示例 1:

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

2.2> 示例 2:

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

2.3> 示例 3:

输入】 []
输出】 []

提示:

  • 二叉树的节点个数的范围是 [0,100]
  •  -100 <= Node.val <= 100

三、解题思路

根据题目描述,我们要构建一个给定二叉树的右侧视图。即,假设我们站在整棵二叉树的最右侧,向二叉树看去,能看到的每层一个节点分别是什么。那么也可以将其理解为,求解出每一层节点中最右侧的那个节点。那么针对这道题,我们可以采用两种常见的解题方式,即:层序遍历和深度优先遍历。那么层序遍历我们在之前的图解中介绍过了,核心解题思路就是两点:

思路1】创建Deque双向队列结构,来暂存节点。
思路2】每次遍历前,都要先获取Deque中节点的个数num,表示某层所存在的节点个数,然后只遍历num个节点。

然后获取每层最后一个节点存储到ArrayList中即可。此处就不赘述了。

那么除了层序遍历,我们也可以采用深度优先遍历方式进行题解。那么主要的解题思路也是有两点:

思路1】针对每次递归调用都传入level层号;
思路2】通过ArrayList的size()是否等于level,来判断某一层是否找到了右视图节点;如果等于,则表示之前没有找到右视图节点,然后调用add方法将当前节点保存到ArrayList即可。

以上就是本题的解题思路,为了便于大家理解,我们以二叉树为[1,2,3,null,4]为例,看一下具体的处理过程。请见下图所示;

四、代码实现

class Solution {
    List<Integer> result = new ArrayList();
    public List<Integer> rightSideView(TreeNode root) {
        dfs(root, 0);
        return result;
    }
    public void dfs(TreeNode node, Integer level) {
        if (node == null) return;
        if (result.size() == level) result.add(node.val);
        dfs(node.right, level + 1);
        dfs(node.left, level + 1);
    }
}

今天的文章内容就这些了:

写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的 点赞 & 分享 。

更多技术干货,欢迎大家关注公众号“爪哇缪斯” ~ \(^o^)/ ~ 「干货分享,每天更新」

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

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

相关文章

ipad笔买原装还是平替?苹果平替电容笔推荐

我认为苹果的电容笔跟一般的电容笔最大的不同就是&#xff0c;苹果原装电容笔有一种特殊的重力压感&#xff0c;可以让我们在纸上感受到最真实的线条粗细变化&#xff0c;用来作画再合适不过了。这是市场上普通电容笔所不具备的功能特性。除了这些&#xff0c;这两款电容笔在写…

【启扬方案】助力智能制造,MES系统解决方案

近年来&#xff0c;智能制造席卷全球&#xff0c;越来越多的制造企业开始采用智能化的生产制造方式&#xff0c;智能工厂作为智能制造的核心之一&#xff0c;成为了制造业发展的重要趋势之一。然而&#xff0c;要实现智能工厂的建设&#xff0c;需涵盖从生产计划、生产调度到生…

安卓调试|入门扫盲必备adb调试工具介绍、安装使用说明

欢迎关注「全栈工程师修炼指南」公众号 点击 &#x1f447; 下方卡片 即可关注我哟! 设为「星标⭐」每天带你 基础入门 到 进阶实践 再到 放弃学习&#xff01; “ 花开堪折直须折&#xff0c;莫待无花空折枝。 ” 作者主页&#xff1a;[ https://www.weiyigeek.top ] 博客&…

11 Redis大厂真实需求落地案例实战

案例实战&#xff1a;微信抢红包 需求分析 各种节假日&#xff0c;发红包抢红包&#xff0c;不说了&#xff0c;100%高并发业务要求&#xff0c;不能用mysql来做一个总的大红包&#xff0c;会有可能拆分成多个小红包&#xff0c;总金额 分金额1分金额2分金额3…分金额N每个人…

【Python编程从入门到实践第一版】P1 变量的命名规则

变量的命名规则 在python中使用变量时&#xff0c;需要遵守一些规则&#xff1a; 变量名只能包含字母、数字和下划线&#xff1b;变量名不能以数字开头&#xff0c;但是可以以字母后者下划线开头&#xff1b;变量名不能包含空格&#xff1b;Python关键字以及函数名不能用作变量…

2.3 基于reactor的HTTP服务器实现

目录 一、基于reactor的HTTP服务器实现二、实现按行读取三、HTTP服务器的收—实现requets函数四、HTTP服务器的发—实现response函数方法之一&#xff1a;open and read五、HTTP服务器的发—实现response函数方法之二&#xff1a;sendfile()1、sendfile函数2、实现3、结果展示 …

面对数据量大的情况如何进行优化?

前后端如何实现 前端展示的优化后端算法的支持1. 分治算法简介基本步骤关键点举例总结 2. 哈希算法简介特点应用 3. 位图&#xff08;BitMap &#xff09;算法简介实现步骤 4. 布隆过滤器&#xff08;Bloom Filter&#xff09;简介工作流程总结 5. 堆排序工作流程总结 前端展示…

港联证券|A股中长期投资价值显现

种种迹象显示&#xff0c;近期A股市场底部特征愈加明显。业内人士指出&#xff0c;当前市场已进入价值投资区域。而从中长期来看&#xff0c;中国经济的复苏前景和高质量发展趋势&#xff0c;为中国资本市场的长期投资价值奠定了基础。 底部特征浮现 2023年以来&#xff0c;A股…

【云原生】Docker网络原理及数据卷、书卷容器、容器互联

docker网络模式的特性 docker初始状态下有三种默认的网络模式 &#xff0c;bridg&#xff08;桥接&#xff09;&#xff0c;host&#xff08;主机&#xff09;&#xff0c;none&#xff08;无网络设置&#xff09; docker network ls 网络模式配置说明host//主机模式–networ…

linuxOPS基础_使用客户端连接linux

ssh概念及其工作流程 ssh概念及其工作流程—>跳转 常用SSH终端工具 SecureCRT 官网&#xff1a;www.vandyke.com SecureCRT是一款支持SSH(SSH1和SSH2)的终端仿真程序&#xff0c;简单地说是Windows下登录UNIX或Linux服务器主机的软件。 XShell 官网&#xff1a;www.ne…

【SpringMVC学习】SSM整合

文章目录 配置准备1. 新建工程项目2. 引入配置文件配置config 功能模块开发数据库与POJO配置Dao和Service和Controller的配置测试接口功能 配置准备 1. 新建工程项目 使用webapp模版生成maven项目 配置相关文件功能 2. 引入配置文件配置config pom.xml <?xml version…

word文件加密怎么操作?1分钟就可以轻松实现!

案例&#xff1a;我经常使用word文章整理一些资料&#xff0c;有些资料比较重要&#xff0c;我不希望别人可以随意打开它。听说可以对word文档进行加密&#xff0c;具体应该怎么操作&#xff1f; 随着数字化时代的到来&#xff0c;电子文档在我们的日常生活和工作中扮演着越来…

chatgpt赋能python:Python噪音数据处理:一个有效的解决方案

Python噪音数据处理&#xff1a;一个有效的解决方案 Python作为一种强大的编程语言&#xff0c;在数据处理领域有着广泛的应用。可以用Python来处理许多不同类型的数据&#xff0c;其中包括噪音数据。噪音数据通常被定义为意外的或不需要的信号&#xff0c;这些信号可能会影响…

创业第一步:如何写好商业计划书

即使你的项目不需要融资&#xff0c;你也把标准商业计划书作为一个工具模板来应用&#xff0c;帮助更全面的盘点你要做的事情。 撰写一份性感的商业计划书如同造房子&#xff1a;第一步是科学设计&#xff0c;打好结构&#xff08;有清晰的撰写逻辑&#xff09;&#xff1b;第…

std::remove cannot convert ‘std::vector<std::__cxx11::basic_string<char> >:: 报错

最近遇到一个非常奇怪C++的问题: vector<string> tmp;tmp.erase(std::remove(tmp.begin(), tmp.end(), Routers[i].name_), tmp.end());在Windows下的VS中编译没有任何问题。 但是在Linux 下的 g++下面报错: 解决方法,包含头文件: #include <algorithm&g…

真无线蓝牙耳机推荐,八款口碑最好的真无线蓝牙耳机排行榜

真无线&#xff08;TWS&#xff09;耳机是近年来最流行的耳机品类&#xff0c;与传统有线或蓝牙耳机相比&#xff0c;它们具有更好的自由度和移动性。而除了常规的柄状和豆状形态的产品&#xff0c;现在市面上出现了越来越多拥有特殊形态的TWS耳机&#xff0c;它们在设计上更加…

执行dotnet ef database update EF同步数据表时报错 Duplicate column name ‘xxx‘

1、问题背景描述&#xff1a; 我为abpnext项目加了一个新表的业务代码。 然后执行了 dotnet ef database update 结果返回错误提示 Duplicate column name ExtraProp&#xff0c;翻译过来就是字段重复。如下图所示 然后我打开新增加的init代码初始化文件&#xff0c;发现他居…

设计模式之不一样的责任链模式

责任链模式&#xff08;Chain of Responsibility Pattern&#xff09;是一种行为型设计模式&#xff0c;它通过将请求的发送者和接收者解耦&#xff0c;使多个对象都有机会处理请求。在这个模式中&#xff0c;请求沿着一个处理链依次传递&#xff0c;直到有一个对象能够处理它为…

如何将坐标数据(.xls)转换为矢量范围(.shp)

在工作中&#xff0c;我们经常会遇到要将坐标数据&#xff08;.xls&#xff09;转换为矢量范围&#xff08;.shp&#xff09;的情况&#xff0c;那该如何使用ArcMap完成这项工作呢 / 『思路&#xff1a;使用ArcMap将Excel数据以 XY 数据的方式导入&#xff0c;导出点要素&#…

知行之桥EDI系统QA|第一期

随着使用知行之桥EDI系统的用户群体日益壮大&#xff0c;在使用过程中&#xff0c;用户可能对软件系统的工作原理、功能模块和实施过程有一些疑问。近期整理了有关知行之桥EDI系统的四个常见问题&#xff1a; 1.如何延长知行之桥EDI系统的登录在线时间&#xff1f; 2.一台Wind…