LeetCode算法递归类—二叉树的右视图

news2024/12/22 18:28:35

目录

199. 二叉树的右视图

题解:

目标:

思路:

过程:

代码:

运行结果:


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

示例 1:

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

示例 2:

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

示例 3:

输入: []
输出: []

提示:

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

题解:

目标:

从二叉树的右侧观察,返回能够看到的节点值列表,即红色部分

 (图片采用力扣官网解题图示)

思路:

对树进行深度优先遍历,采用根右左的顺序,总是先访问右子树那么对于每一层来说,我们在这层见到的第一个结点一定是最右边的结点。

所以如果存储在每个深度访问的第一个结点,一旦我们知道了树的层数,就可以得到最终的结果数组。

过程:

  1. 首先,我们需要定义一个辅助函数 dfs 来进行深度优先搜索。该函数接收当前节点 root 和当前层数 dep 作为参数。
  2. 在 dfs 函数中,我们首先判断当前节点是否为空,如果为空则直接返回。这是终止条件。
  3. 接下来,我们判断当前层数 dep 是否大于已记录的最大层数 depth。如果是,则说明当前层是从右侧观察第一次能够看到的节点,将其值添加到结果列表 res 中,并更新最大层数 depth
  4. 然后,我们递归调用 dfs 函数,在右子节点上进行深度优先搜索,传入当前层数加 1 的值作为参数。
  5. 再次递归调用 dfs 函数,在左子节点上进行深度优先搜索,同样传入当前层数加 1 的值作为参数。
  6. 最后,返回结果列表 res

代码:

class Solution {
    // 记录结果
    List<Integer> res=new ArrayList<>();
    // 辅助记录树的层数
    int depth=-1;
    public List<Integer> rightSideView(TreeNode root) {
        if (root == null) return res; // 处理根节点为空的情况
        dfs(root,0);
        return res;
    }
    public void dfs(TreeNode root,int dep){
        if(root==null) return;
        if(depth<dep){
            res.add(root.val);
            depth++; 
        }
        dfs(root.right,dep+1);
        dfs(root.left,dep+1);
        return;
    }
}

运行结果:

 

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

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

相关文章

使用渲染纹理(RenderTexture)来实现3D视觉

如上图的效果&#xff0c;使用2D场景&#xff0c;通过摄像头的改动&#xff0c;使其看起来像是3D效果一样。 Nintendo Switch上刚推出的《超级马里奥》中&#xff0c;有一些关卡混合了2D和3D的画面&#xff0c; 一般来说&#xff0c;摄像机会直接渲染到电脑屏幕&#xff1b;…

【C语言练习】数组OJ题

目录 一.消失的数字思路1&#xff1a;思路2&#xff1a; 二.移除元素三.轮转数组四.删除有序数组中的重复项五.合并两个有序数组 一.消失的数字 题目&#xff1a; 思路1&#xff1a; 数组是从0加到N&#xff0c;所以把0到N的数加起来减去数组中的值&#xff0c;结果就是消失…

阿里云ECS服务器和轻量应用服务器区别?怎么选择?

阿里云轻量应用服务器和云服务器ECS有什么区别&#xff1f;ECS是专业级云服务器&#xff0c;轻量应用服务器是轻量级服务器&#xff0c;轻量服务器使用门槛更低&#xff0c;适合个人开发者或中小企业新手使用&#xff0c;可视化运维&#xff0c;云服务器ECS适合集群类、高可用、…

Cadence 仿真

电路的学习离不开仿真和实践&#xff0c;主流的仿真软件有很多&#xff0c;有用功pretues和mutisim&#xff0c;这次主要是工作中使用cadence&#xff0c;而且带有比较强大的仿真工具Pspice&#xff0c;所以选择了它 &#xff0c;我使用的版本是cadence 17.4自带的。官方提供了…

ViT模型架构和CNN区别

目录 Vision Transformer如何工作 ViT模型架构 ViT工作原理解析 步骤1&#xff1a;将图片转换成patches序列 步骤2&#xff1a;将patches铺平 步骤3&#xff1a;添加Position embedding 步骤4&#xff1a;添加class token 步骤5&#xff1a;输入Transformer Encoder 步…

leetcode 213. 打家劫舍 II

2023.8.20 本题是 打家劫舍 的进阶版&#xff0c;房屋之间形成一个环了&#xff0c;也就是第一个房屋和最后一个房屋不能一起偷了。那么能偷的情况分为下列三种&#xff1a; 不考虑偷首房间。不考虑偷尾房间。不考虑偷首尾房间。 第三种情况包含于第一和第二种情况了&#xff…

CSerialPort教程4.3.x (1) - CSerialPort项目简介

CSerialPort教程4.3.x (1) - CSerialPort项目简介 前言 CSerialPort项目是一个基于C/C的轻量级开源跨平台串口类库&#xff0c;可以轻松实现跨平台多操作系统的串口读写&#xff0c;同时还支持C#, Java, Python, Node.js等。 CSerialPort项目的开源协议自 V3.0.0.171216 版本…

分组与引用:用正则实现更复杂的查找和替换操作

括号在正则中的功能就是用于分组。简单来理解就是&#xff0c;由多个元字符组成某个部分&#xff0c;应该被看成一个整体的时候&#xff0c;可以用括号括起来表示一个整体&#xff0c;这是括号的一个重要功能。其实用括号括起来还有另外一个作用&#xff0c;那就是“复用”。 …

Linux 线程同步——信号量

一、线程同步的概念 这里的同步就是对程序的执行进行控制&#xff0c;因为如果不进行控制就会出现错误的问题&#xff0c;这里的控制是为了保证程序的正确性。 线程同步指的是当一个线程在对某个临界资源进行操作时&#xff0c;其他线程都不可以对这个资源进行操作&#xff0…

json文件读取数据报错 AttributeError: ‘str‘ object has no attribute ‘items‘

trans_width_table表如下&#xff1a; {frozenset({2}): {3: 250, 2.5: 100, 1.5: 25, 2: 50, 1.8: 50, 2.75: 200, 5: 350, 4: 350, 2.3: 100, 4.5: 350, 3.5: 300}, frozenset({1, 3, 4, 5}): {2.5: 75, 2.75: 100, 1.5: 25, 4: 300, 3.5: 200, 4.5: 300, 3: 100, 5: 300, 2…

沁恒ch32V208处理器开发(六)BLE开发

目录 概述任务初始化任务的调度执行TMOS 处理事件方法 概述 CH32V 系列是基于青稞 32 位 RISC-V 设计的工业级通用微控制器&#xff0c;片上集成 2Mbps 低功耗蓝牙通讯模块&#xff0c;支持低功耗蓝牙 BLE5.x&#xff0c;低功耗蓝牙协议栈以及应用均基于 TMOS&#xff08;Task…

光电比赛小车寻宝【1】--循迹策略

2023光电比赛总结&#xff1a;主要功能实现了&#xff0c;就是视频没做好&#xff0c;落选了非常的遗憾&#xff0c;也有很多的不甘心&#xff0c;也可以作为最后摆烂的惩罚吧&#xff0c;在这里总结一下经验教训。整体感觉时间不是非常充分&#xff0c;因为得到比赛的消息后突…

Linux之管理逻辑卷

目录 管理逻辑卷 认识LInux逻辑卷 LVM基本概念 部署逻辑卷 常用LVM部署命令 案例 管理与调整LVM卷 1.扩展卷组——添加/dev/nvme0n2p4物理卷到vg01中 2.在线扩展逻辑卷 管理逻辑卷 逻辑卷管理器是Linux 系统用于对硬盘分区进行管理的一种机制&#xff0c; 理论性较强 &…

安装搭建私有仓库 Harbor

目录 一. 准备环境 1.1安装 Docker 1.2安装 Docker Compose 二. 下载 Harbor 安装包 三. 解压安装包 四. 配置 Harbor 五. 安装 Harbor 六. 访问 Harbor 七. 创建项目、用户和角色 一. 准备环境 确保您的服务器满足 Harbor 的系统要求。最低要求是至少 2 核 CPU、4GB…

【沁恒蓝牙mesh】CH58x串口环形FIFO数据处理

本文章主要针对沁恒科技的CH58x芯片&#xff0c;以 BLE_UART 工程为依托&#xff0c;介绍串口数据的接收与处理。 该工程中 串口数据的处理用到了环形FIFO机制&#xff0c;可作为其他开发工具 &#x1f4cb; 个人简介 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我…

【LLM数据篇】预训练数据集+指令生成sft数据集

note 在《Aligning Large Language Models with Human: A Survey》综述中对LLM数据分类为典型的人工标注数据、self-instruct数据集等优秀的开源sft数据集&#xff1a;alpaca_data、belle、千言数据集、firefly、moss-003-sft-data多轮对话数据集等 文章目录 note构造指令实例…

k8s扩缩容与滚动更新

使用kubectl run创建应用 kubectl run kubernetes-bootcamp \> --imagedocker.io/jocatalin/kubernetes-bootcamp:v1 \> --port8080 端口暴露出去 kubectl expose pod kubernetes-bootcamp --type"NodePort" --port 8080 使用kubectl create创建应用 kubect…

该产品与此版 VMware Workstation 不兼容,因此无法使用

目录 VMware虚拟机开机报错 解决错误 VMware虚拟机开机报错 配置文件“D:\Users\tyn\Documents\Virtual Machines\Ubuntu16 的克隆\Ubuntu16 的克隆.vmx”是由 VMware 产品创建&#xff0c;但该产品与此版 VMware Workstation 不兼容&#xff0c;因此无法使用。 无法打开配…

VMware 虚拟机三种网络模式详解

文章目录 前言桥接模式(Bridged)桥接模式特点: 仅主机模式 (Host-only)仅主机模式 (Host-only)特点: NAT网络地址转换模式(NAT)仅主机模式 (Host-only)特点: 前言 很多同学在初次接触虚拟机的时候对 VMware 产品的三种网络模式不是很理解,本文就 VMware 的三种网络模式进行说明…

线上异常的处理

一、线上问题的排查 进程ID 简称为PID free -m 查看内存使用情况 iostat 查看磁盘读写活动情况 netstat 查看网络连接情况 df -h 查看磁盘空间使用情况 du -sh 查看文件大小情况 1.1、top 命令查看CPU占用情况 top -n num 查看CPU占用最高的num个进程top -Hp PID 或 top -H -p…