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

DSP复习笔记(5)——外部接口模块XINTF 【注意】 1. 芯片型号:TMS320F28335 2. 适用于NJUSTEO李彧晟老师课程 3. 参考资料:《TMS320F28335 DSP原理、开发及应用》 4. 对应PPT第二章 5. 本章内容较多而且较为重要,请结合PPT一起复习 阅读详情

一、题目

给定一个二叉树的 根节点 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^)/ ~ 「干货分享,每天更新」

QMT vs Ptrade:量化交易新手如何根据需求选择券商系统(附实战案例) 本文对比了QMT和Ptrade两大券商量化交易系统的核心差异,帮助量化交易新手根据需求选择合适的平台。QMT适合技术面策略开发,执行效率高;Ptrade则提供全面的财务数据和复杂策略支持。通过实战案例,展示了如何结合两平台优势实现高效量化交易。 阅读详情

相关推荐

LeetCode 199 二叉树右视图

在解决 LeetCode 199 二叉树右视图(Binary Tree Right Side View)问题时,我们需要找到从二叉树右侧看见的节点值(即每一层中最靠右的节点值)。以下是多种解法、对应模板及变体问题的讨论。

互联网架构师笔记 1324

LeetCode二叉树系列——199二叉树右视图

刚刚我们说过了二叉树有两种存储方式顺序存储,和链式存储,顺序存储就是用数组来存,这个定义没啥可说的,我们来看看链式存储的二叉树节点的定义方式。intval;};大家会发现二叉树的定义和链表是差不多的,相对于链表,二叉树的节点里多了一个指针,有两个指针,指向左右孩子。这里要提醒大家要注意二叉树节点定义的书写方式。在现场面试的时候面试官可能要求手写代码,所以数据结构的定义以及简单逻辑的代码一定要锻炼白纸写出来。二叉树是一种基础数据结构,在算法面试中都是常客,也是众多数据结构的基石。...

w20001118的博客 1286

我在代码随想录|写代码Day16之二叉树-二叉树的层序遍历, 二叉树的层次遍历 II, 二叉树右视图,N叉树的层序遍历,在每个树行中找最大值,填充每个节点的下一个右侧节点指针,二叉树的最大/小深度

博主介绍: 27dCnc专题 : 数据结构帮助小白快速入门。

2303_79299383的博客 1091

LeetCode199. 二叉树右视图

一、题目描述 给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。 示例: 输入: [1,2,3,null,5,null,4] 输出: [1, 3, 4] 解释: 1 <--- / \ 2 3 <--- \ \ 5 4 <--- 二、解题思路 & 代码 2.1 DFS 初步想法 由于树的形状无法提前知晓,不可能设计出优于 O(n) 的算法。因此,我们

weixin_41888257的博客 966

每日一题-199. 二叉树右视图

每日一题-199. 二叉树右视图,使用BFS和DFS方式解决遍历问题。

在途中 322

199.二叉树右视图(java)

题目描述 给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。 示例: 输入: [1,2,3,null,5,null,4] 输出: [1, 3, 4] 解释: 解法一:BFS 利用size获得下一层的节点个数 当循环读取到最后一个节点的时候,加入list中 class Solution { public List<Integer> ...

m0_37605197的博客 756

leetcode 199. 二叉树右视图 (JAVA)

题目描述: 给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。 本题核心思想就是遍历二叉树,取得每一层最右边的第一个节点值。 关键点在于有几种遍历方法呢? 第一种: 广度优先搜索(BFS遍历方法) class Solution { public List<Integer> rightSideView(TreeNode root) { //res去储存最后输出的结果 List<Integer> r

迪文的博客 1034

LeetCode - 199. 二叉树右视图

DFS访问顺序(先右后左)是:1 -> 3 -> 6 -> 2 -> 5 -> 4。右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。最终result=[1,3,6],正好是树的右视图。如果当前节为空,直接返回检查当前深度是否等于结果数组的长度如果是,说明这是当前深度第一个被访问的节点,将其值加入结果数组如果不是,说明该深度已经有节点被加入结果,不做操作先递归访问右子树(深度+1),再递归访问左子树(深度+1)

2402_83315537的博客 1197

LeetCode 199 - 二叉树右视图

题目描述 199. 二叉树右视图 解法:层遍历(C++) 思路很简单,就是层遍历到该层最右的节点,就将这个节点的值放入结果数组中 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * T...

Aries_young的博客 142

Leetcode199. 二叉树右视图

Leetcode199. 二叉树右视图

ProgramNovice的博客 603

LeetCode 199二叉树右视图 —— 利用层序遍历获取每层最右节点

摘要: 题目要求返回二叉树右视图,即每层最右侧的节点值。核心思路是通过**层序遍历(BFS)**记录每层最后一个节点。具体步骤: 队列处理:用队列存储每层节点,遍历时记录当前层节点数。 右节点判定:当遍历到当前层最后一个节点(i == size-1)时,将其加入结果。 复杂度:时间/空间复杂度均为O(N)。 其他方法:DFS优先遍历右子树,首次到达某深度时记录节点(空间O(H))。 常见错误: 仅遍历右子树(忽略左子树中更深的右节点)。 混淆左/右视图右视图需每层最后节点)。 未处理空树情况。 面试点:

2501_91888992的博客 272

【亡羊补牢】挑战数据结构算法 第49期 LeetCode 199. 二叉树右视图二叉树

仰望星空的人,不应该被嘲笑 题目描述 给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。 示例: 输入: [1,2,3,null,5,null,4] 输出: [1, 3, 4] 解释: 1 <--- / \ 2 3 <--- \ \ 5 4 <--- 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problem..

超逸の学习技术博客 573

力扣199.⼆叉树的右视图 --python

⼆叉树的右视图 解法:队列 力扣102.⼆叉树的层序遍历:https://blog.csdn.net/weixin_45047081/article/details/115797910?spm=1001.2014.3001.5501 力扣107.⼆叉树的层次遍历II: https://blog.csdn.net/weixin_45047081/article/details/115798522?spm=1001.2014.3001.5501 通过观察发现,其做法还是广度优先搜索,并且和之前的102.⼆叉树的

weixin_45047081的博客 271

LeetCode 199. 二叉树右视图(C++)

题目: 给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。 示例: 输入: [1,2,3,null,5,null,4] 输出: [1, 3, 4] 解释: 1 &lt;--- / \ 2 3 &lt;--- \ \ 5 4 &lt;--- 思路: 这道...

my_clear_mind的博客 602

LeetCode题解-199-Binary Tree Right Side View

原题 原题链接:https://leetcode.com/problems/binary-tree-right-side-view/ 解法概览 解法1:迭代法,BFS 解法2:递归,参考了https://discuss.leetcode.com/topic/11768/my-simple-accepted-solution-java/7 解法1 解题思路 采用

WangT443的博客 700

面试经典算法系列之二叉数6 -- 二叉树右视图

公众号:阿Q技术站。

qq_44630255的博客 1399

二叉树右视图:层序遍历的递归之美

通过优先访问右子树的深度优先遍历策略,简洁高效地获取每层最右侧节点。文章详细解析了根→右→左遍历顺序的原理,对比了DFS与BFS的差异,并通过代码实现和边界案例分析验证了该方法的正确性。DFS解法利用递归和深度判断,以O(h)空间复杂度优雅地解决了问题,突出了优先处理右侧节点的核心思想。

Dvbdrg的博客 295

LeetCode 199二叉树右视图 题解 C/C++

主要思路 方法一:深搜 维护一个map映射,key为树的高度,value为对应层数(高度)的最右值。在维护一个结点栈和深度栈,这两个栈也是一一对应的关系,结点与他的高度。 算法主要流程就是从根节点开始搜索,每次优先访问右子树,那么这一层的最右节点就是它。若没有右子树则访问左子树,对左子树在执行上述操作。用栈模拟该过程即可,先将左子树入栈,再将右子树入栈,然后栈顶元素出栈,优先处理的就是右子树。 方法二:广搜 对二叉树进行层次遍历,从左到右,每层最后遍历的即为最右边结点,用队列实现,不断更新每一层最右结

止心的博客 226

LeetCode算法题精讲】LeetCode 二叉树中档题怎么刷?

二叉树刷到中档题就没思路?核心原因是没搞懂"题目要什么"。本文以 LeetCode 102 二叉树的层序遍历 + 236 二叉树的最近公共祖先两道 Medium 题为教材,讲透 BFS(队列 + size 快照)与 DFS(递归后序 + 返回值信号)两种遍历引擎的实战选择逻辑——层级问题交给 BFS,祖先/路径问题交给 DFS 后序。附三语言完整代码、复杂度分析、面试追问清单与变体地图(107/199/429/235),掌握本期即掌握二叉树中档题"两把钥匙"。

2401_88352165的博客 320

LeetCode Hot 100 | 二叉树(下)· BST与高级操作(C++ 题解)

题号题目难度核心技巧时间复杂度98验证二叉搜索树🟡 中等中序遍历 + pre 记录上一节点,用 long long 避免溢出O(n)230BST 第 K 小的元素🟡 中等迭代中序遍历,找第 k 个节点即返回O(h+k)199二叉树右视图🟡 中等BFS 层序遍历,记录每层最后一个非空节点O(n)114二叉树展开为链表🟡 中等后序递归,展开后把左子树接到右边,末尾接原右子树O(n²)105前序+中序构造二叉树🟡 中等。

jcm0903的博客 300

基于神经网络的风力发电机组状态监测的研究

基于神经网络的风力发电机组状态监测的研究

上一篇: 图解LeetCode——114. 二叉树展开为链表
下一篇: 图解LeetCode——230. 二叉搜索树中第K小的元素
爪哇缪斯
博客等级 码龄11年 1942粉丝 286原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值