二叉树----10.二叉树的右视图

scau 19069 二叉树的右视图 阅读详情

 

题目链接

/**

            能看到节点的优先级:

                            右子树外侧 > 右子树内侧 > 左子树内侧 > 左子树外侧;  

                            高优先级节点出现后,低优先级的节点不可见

            输出顺序:

                    从顶部开始按层级输出

            解决方案:

                    迭代法(广度优先):

                                    层序遍历(引入队列) + 优先级限制

                                    按先左后右的顺序入队 每层可见的元素必然是队尾元素,只保存每层队尾元素 其余直接移除即可

                    递归法(深度优先):

                                    按根 右 左的顺序递归遍历

                                    没层递归访问到的第一个元素就是最右侧的元素

*/

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {

    //保存 每层可见的节点
    List<Integer> list = new ArrayList<>();

    public List<Integer> rightSideView(TreeNode root) {
        /**
            能看到节点的优先级: 
                            右子树外侧 > 右子树内侧 > 左子树内侧 > 左子树外侧;  
                            高优先级节点出现后,低优先级的节点不可见
            输出顺序: 
                    从顶部开始按层级输出
            解决方案:
                    迭代法(广度优先): 
                                    层序遍历(引入队列) + 优先级限制
                                    按先左后右的顺序入队 每层可见的元素必然是队尾元素,只保存每层队尾元素 其余直接移除即可
                    递归法(深度优先): 
                                    按根 右 左的顺序递归遍历
                                    没层递归访问到的第一个元素就是最右侧的元素
        */
        
        //迭代法(广度优先)
        //bfs(root); 

        //递归法(深度优先)
        dfs(root,1); 
        return list;
    }

    //迭代(广度优先)
    private void bfs(TreeNode root) {
        if(root == null) {
            return;
        }
        
        //队列
        Queue<TreeNode> queue = new ArrayDeque<>();
        queue.add(root); //初始化

        while(!queue.isEmpty()) {
            //记录当前队列中的元素个数  即当前层中元素个数
            int size = queue.size();

            //遍历当前层 按先左后右的顺序入队 那么可见节点必然是队尾元素
            for(int i = 0; i < size; i++) {
                //出队
                TreeNode node = queue.poll();

                //只有队尾元素才可见保存起来 否则不保存
                if(i == size - 1) {
                    list.add(node.val);
                }

                //添加下一层的元素 提前记录队列中元素的意义, 避免此时的添加混淆各层的元素
                if(node.left != null) queue.add(node.left);
                if(node.right != null) queue.add(node.right);
            }
        }
    }

    //递归(深度优先)
    private void dfs(TreeNode root,int depth){
        if(root == null) {
            return;
        }

        //说明当前层级是第一次遍历到
        if(depth > list.size()) {
            //将当前节点保存
            list.add(root.val);
        }

        //先右 递归时记录当前层数
        dfs(root.right,depth + 1);
        dfs(root.left,depth + 1);
    } 

}

秋招突击——8/22~8/26——复习{}——新作{二叉树的右视图、二叉树展开为链表、从前序与中序遍历序列构造二叉树、路径总和III、二叉树的最近公共祖先} 看了一下查灵山艾府大佬的相关总结经验,感觉还是很厉害的!还有就是刷题的话,还是没有一个固定固定的思路,还是不得行!没有一个指导的方式! 至此树已经刷完了,剩下的就剩下每一个章节的hard题目了,感觉还是要在刷第二遍!秋招加油! 阅读详情

相关推荐

DirectX修复工具使用技巧之二——手动修复C++创建失败的文件

最后更新:2021-2-25 随着V4.0正式版的发布,近来有部分用户来咨询如何解决C++文件创建失败的问题。在此我将以解决最常见的C++2015-2019文件创建失败为例,向大家演示一下在线修复的方法,其他C++或文件的方法大同小异。此次操作以Windows 7为例,其他系统相应参考即可。 首先,如果希望程序能手动在线修复创建失败的失败,请首先确定您使用的V4.0.2版或更高版本,老版本不支持此功能。查看程序版本的方式可以把鼠标放在DirectX Repair.e...

VBcom的专栏 6万+

【算法】二叉树的右视图

Android自定义View,一个可以显示进度的圆环View 效果如图所示: 代码如下 public class PlayProgressView extends View { private Paint mPaint; private int roundColor; private int roundProgressColor; private int triangleColor; private float roundWidth; private int

yang553566463的博客 1695

FFmpeg音频转换避坑实录:为什么VOS的REC转MP3比WAV转MP3体积小一半?

本文深入解析了FFmpeg在VOS系统REC格式音频转换中的优化技巧,揭示了REC转MP3比WAV转MP3体积小一半的原因。通过分析REC格式的压缩特性、转码参数陷阱及FFmpeg调优方法,帮助开发者实现高效音频转换,显著降低存储成本。

weixin_30752699的博客 528

二叉树的右视图

二叉树的右视图 1、题目 给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。 示例: 输入: [1,2,3,null,5,null,4] 输出: [1, 3, 4] 解释: 1 <--- / \ 2 3 <--- \ \ 5 4 <--- 2、代码 2.1、代码思路 大体思路和二叉树的层序遍历差不多,只不过每次只需要当前层的队列中最后一个元素

Oneby的博客 988

Winform使用TreeView控件实现带复选框的三态树

刚接触c#,项目中用到Treeview实现三态,即选中、未选中、半选中状态,并且要求父子节点选择联动,效果类似下图网上有很多例子,于是研究了一下,结合网上大佬们的例子,所以在这里记录一下。首先新建一个Winform工程拖个TreeView控件,然后运行。。。嗯。。。加点数据吧。private void CreateTree() { TreeNode anime = new TreeNode...

laoyezha的博客 2万+

飞腾E2000单板移植openEuler 5.10内核与麒麟系统的实践指南

本文详细介绍了在飞腾E2000单板上移植openEuler 5.10内核并搭配麒麟系统根文件系统的完整实践指南。内容涵盖从编译环境搭建、内核配置裁剪、设备树适配,到根文件系统准备、U-Boot引导配置及启动调试的全流程,旨在帮助开发者打造一个内核版本新、软件生态全的稳定混合系统。

weixin_29309475的博客 260

【算法】Java-二叉树的右视图(BFS、DFS两种解法)

这道题的解法有很多,分享这两种解法的原因是在做这道题时,我感受到了自己的一点点质变。方法一,对队列的熟练应用。方法二,深度理解了递归的过程,后面还要继续应用,继续体会。学习算法增加了我看问题的视角,经常感叹“原来可以这样”,“居然还能这样”,“这人想的真好”之类。但我们知道“知道”和“做到”之间,有一条“鸿沟”,用新的“知道”的方法解出题的感觉真是太棒了,我做到了!当然,过程非常不容易,经常有些题目都看不懂,或者别人的思路理解不了。这时候,我们要想想,这道题难度是不是太大了,如果太大,要降低难度;

软件工程探索之旅 1713

基于eBPF的零侵入LLM智能体观测:AgentSight架构与实战

在分布式系统和云原生架构中,可观测性是保障应用稳定运行与高效排障的核心能力。其原理在于通过日志、指标和追踪三大支柱,从外部视角持续收集和分析系统状态,而非依赖应用内部埋点。这一技术价值在于能以统一、低开销的方式,理解复杂系统的内部行为,尤其在微服务、容器化及Serverless等动态环境中至关重要。应用场景广泛覆盖了性能监控、安全审计、故障诊断与根因分析。当我们将这一基础理念应用于当下快速发展的AI智能体领域时,便自然引出了对LLM智能体进行无侵入、系统级行为观测的需求。传统的应用层方案需要集成SDK,对闭

weixin_28696185的博客 324

二叉树的右侧视图问题详解与解法【层序遍历、DFS】

层序遍历适合一次性解决问题,逻辑简单明了,适合新手学习。深度优先搜索方法可以在某些场景下更高效,特别是当需要优先访问右子树时。两种方法都能有效解决二叉树的右侧视图问题。选择哪种方法取决于具体需求和问题规模。希望这篇文章能帮助你深入理解二叉树的右侧视图问题以及如何使用不同的算法解决它。

qq_22841387的博客 1574

15.1-缓存调试解析

摘要:DSU-120提供L3缓存和监听过滤器(SF)RAM的调试功能,通过CLUSTERCDBG寄存器控制访问。该功能需在集群ON电源模式下使用,且需确保单核访问。寄存器位字段根据读写操作不同,可配置WAY、RAM类型等参数。数据读取分为监听过滤器RAM、标签RAM、数据RAM及MTE标签四种类型,各有特定的位字段解释。配置参数包括切片ID宽度、标签索引宽度等,随缓存大小变化。

baron-周贺贺-代码改变世界ctw 112

C#上位机+YOLO实战:从环境搭建到实现首个目标检测(零基础入门)

/ YOLOv8的类别名称(共80类,对应COCO数据集)// ONNX推理会话// YOLOv8的输入宽度// YOLOv8的输入高度本文从技术选型、环境搭建到代码实现,详细介绍了如何将C#上位机与YOLOv8结合,实现基础的目标检测功能。整个过程避开了常见的坑点,同时对核心原理和代码逻辑进行了详细解析,希望能帮助零基础的开发者快速入门。实际上,C#上位机+YOLO的组合在工业领域有非常广泛的应用,本文的案例只是一个起点。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 791

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

公众号:阿Q技术站。

qq_44630255的博客 1402

基于STM32的智能婴儿床设计(蓝牙通信+摄像头监控)_315

本项目设计并实现了一款基于STM32微控制器的智能婴儿床系统,通过多种传感器和智能控制模块为家长提供更便捷和高效的婴儿照护解决方案。系统包括婴儿哭泣检测、湿度监测、空气质量检测、温度监控等多项功能,并通过蓝牙与手机APP进行数据传输和远程控制。婴儿床内置摇摇床和安抚音乐播放功能,能够在婴儿哭泣时自动启动摇摇床并播放安抚音乐。此外,系统还支持摄像头远程监控,让家长实时查看婴儿的状态。整个系统采用STM32F103RCT6作为核心控制单元,结合声音传感器、湿度传感器、MQ135空气质量传感器。

865

10 二叉树的递归-相同、对称、平衡、右视图

递归,是考虑大问题的时候包含了重复的小问题(比如计算树的深度,也就是计算根节点所在树的高度,左节点、右节点所在树的高度以此类推,这是。呢是到达边界条件,终止后往上回归结果。)在计算的时候也需要从上往下,从大往小,上面的先进,后出,这样的数据结构,就是熟悉的。层序遍历,注意queue([root])传入的得是[root]可迭代的变量。递归函数是对某些变量进行修改,所以不需要有返回值,并且需要递归的初始条件。先右子树,再左子树。当递归深度大于答案长度时就记录。

weixin_49206002的博客 341

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

算法学习10—二叉树 相同 对策 平衡 右视图

【代码】算法学习10—二叉树 相同 对策 平衡 右视图。

weixin_45699456的博客 162

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

刷题记录(回顾)HOT100 二叉树-10: ​199. 二叉树的右视图

难度:中等给你一个二叉树的根节点root,判断其是否是一个有效的二叉搜索树。子树truefalse根节点的值是 5 ,但是右子节点的值是 4。[1, 104]

weixin_44610684的博客 522

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

算法总结10|二叉树灵活运用递归|相同 对称 平衡 右视图

如果上面没有接收到-1,返回该子树的高度(max(左子树深度,右子树深度)+1)1,3,4记录后,答案长度为3,根节点向左走,节点2,5的深度小于3,不记录。终止条件:有一颗树为空---两颗树都为空,返回true否则返回false。终止条件:有一颗树为空---两颗树都为空,返回true否则返回false。如果左右子树高度差大于1,返回-1,将-1传到上面去。如何判断该节点需要记录到结论中?先递归右子树,再递归左子树。左右子树的高度差不为1。递归左右子树是否相同。递归左右子树是否相同。

leeyayai_xixihah的博客 285

力扣刷题Day 10:二叉树的右视图(199)

一路往右下走,走到不能走的时候记住当前深度,然后往回溯,回溯过程中遇到深度大于之前记录的那个深度的结点则更新深度,走到不能走为止继续回溯。

qq_52643100的博客 282

199. 二叉树的右视图(JS实现)

想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。3.while循环控制层数,其中的for循环保证取到的值为二叉树右视图的值。2. 将根节点赋值给quen,quen中最后一个元素是二叉树右视图的值;1.该算法是可以为层次遍历;

qq_43284411的博客 215

【Hot100】LeetCode—199. 二叉树的右视图

1- 层序遍历,存入path2- 结果集收集每层path的最后一个元素。

weixin_44382896的博客 450

力扣题/二叉树/二叉树的右视图

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

温温温B的博客 2731

【刷题笔记】二叉树3

之前已经介绍过了二叉树的前中后序遍历及层序遍历,这是解决所有二叉树问题的手段。上一期也提到过,很多题既可以用前中后序遍历去做也可以用层序遍历去做。本期就介绍一下例题,分别展示两种做法。

bandaoliunian_的博客 1105

LeetCode题练习与总结:二叉树的右视图--199

本文详细阐述了使用广度优先搜索解决二叉树右侧视图问题的方法,包括解题思路、代码实现、时间空间复杂度分析,以及涉及的关键知识点,为理解和实现该问题提供了全面指导。

一直学习永不止步 625

199. 二叉树的右视图

想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。

mrjieke6的博客 224

【题解】199.二叉树的右视图(二叉树、bfs、dfs)

【代码】【题解】199.二叉树的右视图(二叉树、bfs、dfs)

Colorful___的博客 460

LeetCode Hot100 二叉树的右视图

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

m0_67582670的博客 272
上一篇: Redis----线程模型与持久化
下一篇: 二叉树----11.二叉树展开为链表
码破苍穹ovo
博客等级 码龄2年 377粉丝 114原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值