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

目录

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.mzph.cn/news/50193.shtml

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

相关文章

构建 NodeJS 影院预订微服务并使用 docker 部署(03/4)

一、说明 构建一个微服务的电影网站&#xff0c;需要Docker、NodeJS、MongoDB&#xff0c;这样的案例您见过吗&#xff1f;如果对此有兴趣&#xff0c;您就继续往下看吧。 你好社区&#xff0c;这是&#x1f3f0;“构建 NodeJS 影院微服务”系列的第三篇文章。本系列文章演示了…

MySql 环境搭建

目录 MySql 在 CentOS 7 环境下安装。 说明&#xff1a; 1.卸载不要的环境 2.配置 mysql 官方 yum 源 3.开始安装 4.启动 mysql 5.mysql 登录 6.配置 mysql 7. 设置开机启动 MySql 在 CentOS 7 环境下安装。 说明&#xff1a; 在安装与卸载中&#xff0c;用户切换成 r…

Java请求webservice踩过的坑

最近项目对接过程中&#xff0c;因为对方系统比较旧&#xff0c;我们和对方进行交互使用webservice方式进行&#xff0c;对方给出相关文档&#xff0c; 接口地址&#xff1a;http://ip:port/abc/def/xxxService?wsdl 接口名称&#xff1a;methodA 1-springboot配合CXF使用 …

PostgreSQL+SSL链路测试

SSL一个各种证书在此就不详细介绍了&#xff0c;PostgreSQL要支持SSL的前提需要打开openssl选项&#xff0c;包括客户端和服务器端。 测试过程。 1. 生成私钥 root用户&#xff1a; mkdir -p /opt/ssl/private mkdir -p /opt/ssl/share/ca-certificateschmod 755 -R /opt/ss…

java判断ip是否为指定网段

具体网络知识原理请看这个博文 /**** param address servletRequest.getRemoteAddr();* param host servletRequest.getRemoteHost();* return* Description 检验IP是否符合安全限定*/private boolean ipIsInNet(String address, String host){Set<String> iPset allow…

缓存优化--使用Redis将项目进行优化

缓存优化–使用Redis 文章目录 缓存优化--使用Redis1、环境搭建2、缓存短信验证码2.1、实现思路2.2、代码改造 3、缓存菜品数据3.1、实现思路3.2、代码改造 问题描述&#xff1a; 用户数量多&#xff0c;系统访问量大的时候&#xff0c;用户发送大量的请求&#xff0c;导致频繁…

Laravel 框架构造器的查询表达式构造器的 Where 派生查询 ⑥

作者 : SYFStrive 博客首页 : HomePage &#x1f4dc;&#xff1a; THINK PHP &#x1f4cc;&#xff1a;个人社区&#xff08;欢迎大佬们加入&#xff09; &#x1f449;&#xff1a;社区链接&#x1f517; &#x1f4cc;&#xff1a;觉得文章不错可以点点关注 &#x1f44…

中文医学知识语言模型:BenTsao

介绍 BenTsao&#xff1a;[原名&#xff1a;华驼(HuaTuo)]: 基于中文医学知识的大语言模型指令微调 本项目开源了经过中文医学指令精调/指令微调(Instruction-tuning) 的大语言模型集&#xff0c;包括LLaMA、Alpaca-Chinese、Bloom、活字模型等。 我们基于医学知识图谱以及医…

ansible-playbook yml 查看进程

- name: 查看 sshd 进程hosts: your_hoststasks:- name: 运行 pgrep 命令查找 sshd 进程shell: pgrep sshdregister: command_result- name: 打印进程输出debug:var: command_result.stdout_linesansible-playbook process.yml stdout_lines 是变量的一个属性&#xff0c;变量结…

2023Spring之八股文——面试题

Spring概述(10) 1. 什么是spring? Spring是一个轻量级Java开发框架&#xff0c;最早由Rod Johnson创建&#xff0c;目的是为了解 决企业级应用开发的业务逻辑层和其他各层的耦合问题。它是一个分层的 JavaSE/JavaEE full-stack&#xff08;一站式&#xff09;轻量级开源框架…

swc-loader Segmentation fault “$NODE_EXE“ “$NPM_CLI_JS“ “$@“

webpack swc swc还不是很稳定。 在swcrc 中有配置plugins 时&#xff0c;swc 转换 /node_modules/ 会报错。 环境 swc/cor1.3.62swc-loader0.2.3swc-plugin-vue-jsx0.2.5 解决 配两套rule,一套处理项目代码&#xff0c;一套处理node_modules webpack.config.js rules:…

Mongodb 更新集合的方法到底有几种 (下) ?

更新方法 Mongodb 使用以下几种方法来更新文档 &#xff0c; Mongodb V5.0 使用 mongosh 客户端&#xff1a; db.collection.updateOne(<filter>, <update>, <options>) db.collection.updateMany(<filter>, <update>, <options>) db.c…

Java8 实现批量插入和更新,SpringBoot实现批量插入和更新,Mybatis实现批量插入和更新

前言 基于mybatis实现的批量插入和更新 由于直接执行批量所有数据可能会出现长度超出报错问题&#xff0c;使用如下方式即可解决 实现 原理还是分配执行&#xff0c;这里的100就是设定每次执行最大数 /*** 封装使用批量添加或修改数据库操作* * param list 集合* param inse…

dnsmasq-dhcp DHCPDISCOVER “no address available“ 问题解决方法

问题现象 在Centos7.5系统中已安装dnsmasq组件并开启DHCP服务功能&#xff0c;然而客户端无法通过DHCP的方式获取IP&#xff0c;通过查看系统日志/var/log/messages发现日志中存在以下两个关键信息&#xff1a; dnsmasq-dhcp DHCPDISCOVER “no address available”DHCPNAK 1…

什么是神经网络

什么是神经网络 什么是神经网络&#xff1f;CNN、RNN、GNN&#xff0c;这么多的神经网络&#xff0c;有什么区别和联系&#xff1f; 既然我们的目标是打造人工智能&#xff0c;拥有智慧的大脑无疑是最好的模仿对象&#xff0c;人脑中有约860亿个神经元&#xff0c;这被认为是…

量化开发学习入门-概念篇

1.网格交易法 网格交易法&#xff08;Grid Trading&#xff09;是一种基于价格波动和区间震荡的交易策略。它适用于市场处于横盘或震荡的情况下。 网格交易法的基本思想是在设定的价格区间内均匀地建立多个买入和卖出水平&#xff08;网格&#xff09;&#xff0c;并在价格上…

设计模式-责任链

在现代的软件开发中&#xff0c;程序低耦合、高复用、w易拓展、易维护 什么是责任链 责任链模式是一种行为设计模式&#xff0c; 允许你将请求沿着处理者链进行发送。收到请求后&#xff0c; 每个处理者均可对请求进行处理&#xff0c; 或将其传递给链上的下个处理者。 使用场景…

ModaHub魔搭社区:WinPlan企业经营垂直大模型数据建模(二)

目录 维度模版管理 录入维度数据 经营指标 创建经营指标 经营指标管理 维度模版管理 创建维度后,可在维度库的左侧栏展示全部启用中的维度,你也可以再次编辑维度模版;如不再需要该维度,可停用,停用后可在停用管理里重新启用或删除。 1)停用:维度停用后,不会出现在…

LAMP架构

这里写目录标题 LAMP架构一.LAMP架构的组成二.CGI和fastcgi1.CGI2.fastcgi3.比较4.PHP4.2**的** **Opcode** **语言**4.3PHP 配置 三.编译安装Apache http服务1.环境准备2.安装环境依赖包3.解压软件包4.移动apr包 apr-util包到安装目录中&#xff0c;并切换到 httpd-2.4.29目录…

拓扑排序Topological sorting/DFS C++应用例题P1113 杂务

拓扑排序 拓扑排序可以对DFS的基础上做变更从而达到想要的排序效果。因此&#xff0c;我们需要xy准备&#xff0c;vis数组记录访问状态&#xff0c;每一个任务都可以在dfs的过程中完成。 在使用拓扑排序方法时一些规定&#xff1a; 通常使用一个零时栈不会直接输出排序的节点…