题目描述

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

示例 1:

输入:root = [1,2,3,null,5,null,4]
输出:[1,3,4]
解释:
在这里插入图片描述

示例 2:
输入:root = [1,2,3,4,null,null,null,5]
输出:[1,3,4,5]
解释:
在这里插入图片描述
示例 3:
输入:root = [1,null,3]
输出:[1,3]

示例 4:
输入:root = []
输出:[]

提示:

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

思考:层次遍历+取层尾节点

核心是用队列维护每一层节点,遍历每层时直接提取最后一个节点的值加入结果——因层次遍历按“左→右”顺序收集下一层节点,层尾节点天然是该层最右侧节点,无需额外判断。

算法过程

  1. 边界处理:若根节点rootnull(空树),直接返回空结果数组。
  2. 初始化:创建结果数组result(存储右视图节点值),队列queue初始存入根节点(第一层仅根节点)。
  3. 层序循环(遍历每一层)
    • 记录当前层节点数:用size = queue.length获取当前层总节点数(避免后续队列添加子节点后长度变化);
    • 取层尾节点值:当前层最右侧节点是队列第size-1个元素,将其val加入result
    • 收集下一层节点:创建临时数组tmp,遍历当前层所有节点,按“左子节点→右子节点”顺序加入tmp(保证下一层节点仍按左→右排列,层尾为最右侧节点);
    • 更新队列:将队列替换为tmp(下一层节点),进入下一轮循环,直至队列为空。
  4. 返回结果:返回result,即二叉树右视图的节点值列表。

时空复杂度

  • 时间复杂度:O(n),n为二叉树节点总数。
    原因:每个节点仅入队、出队各1次,取层尾节点值的操作也为O(n),总操作次数与节点数线性相关。
  • 空间复杂度:O(m),m为二叉树最宽层的节点数。
    原因:队列需存储当前层所有节点,最坏情况(完全二叉树最后一层)m=O(n/2)=O(n),最好情况(链状树,每层仅1个节点)m=1。

代码

/*** Definition for a binary tree node.* function TreeNode(val, left, right) {*     this.val = (val===undefined ? 0 : val)*     this.left = (left===undefined ? null : left)*     this.right = (right===undefined ? null : right)* }*/
/*** @param {TreeNode} root* @return {number[]}*/
var rightSideView = function(root) {const result = [];if (!root) return result; // 空树返回空数组let queue = [root]; // 队列:维护当前层节点while (queue.length) {const size = queue.length; // 固定当前层节点数(避免后续添加子节点影响)// 取当前层最后一个节点(最右侧节点)的值,加入结果result.push(queue[size - 1].val);// 收集下一层节点(左→右顺序,保证下一层层尾仍为最右侧节点)let tmp = [];for (let node of queue) {if (node.left) tmp.push(node.left);if (node.right) tmp.push(node.right);}queue = tmp; // 切换到下一层}return result;    
};

关键逻辑解析

  1. 为何按“左→右”收集下一层节点?
    无论收集顺序是左→右还是右→左,只要能准确找到“当前层最后一个节点”即可。按左→右收集是层次遍历的常规习惯,且无需额外调整顺序——队列中当前层的最后一个元素,就是该层从右往左看的第一个可见节点。

  2. 为何要固定当前层节点数size
    若不固定size,直接遍历queue时,后续添加的下一层节点会混入当前层队列,导致遍历范围错误。用size = queue.length提前锁定当前层节点数,确保仅遍历当前层节点,避免逻辑混乱。

  3. 对比深度优先(DFS)实现的优势
    层次遍历(BFS)的优势是“按层处理”,天然适合“取层尾节点”的需求,代码逻辑直观,无需维护深度参数;而DFS(如先右后左的前序遍历)需记录当前节点深度,仅在“首次访问该深度”时记录节点值,逻辑稍复杂。两种方法时间复杂度均为O(n),空间复杂度相近,但层次遍历更贴合右视图的“层特性”。

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

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

相关文章

Redis《RedisSerializer》

文章目录RedisSerializer为什么要使用如何使用RedisSerializer总结RedisSerializer 为什么要使用 RedisTemplate 有默认的序列化器&#xff0c;但默认使用的 JdkSerializationRedisSerializer 存在一些问题&#xff1a; 序列化后的数据包含类信息等额外内容&#xff0c;导致…

基于开源AI大模型AI智能名片S2B2C商城小程序的文案引流与社交传播运营策略研究

摘要&#xff1a;本文聚焦开源AI大模型AI智能名片S2B2C商城小程序&#xff0c;探讨其文案引流与社交传播运营策略。阐述文案在引流中的重要性&#xff0c;分析开源AI大模型AI智能名片S2B2C商城小程序的特性&#xff0c;研究文案设计策略、社交传播机制及运营策略实施与效果评估…

NGINX vs HAProxy vs LVS:优势与选型分析

目录 1. 负载均衡的江湖:三巨头初探 2. NGINX:全能选手的多面魅力 NGINX 核心优势 NGINX 的短板 NGINX 实战案例 3. HAProxy:调度大师的精细之道 HAProxy 核心优势 HAProxy 的短板 HAProxy 实战案例 4. LVS:内核猛兽的极致性能 LVS 核心优势 LVS 的短板 LVS 实…

AI+ 行动意见解读:音视频直播SDK如何加速行业智能化

引言&#xff1a;国家战略、技术基座与行业落地 8 月底&#xff0c;国务院发布了《“人工智能”行动意见》&#xff0c;明确将人工智能提升为继“互联网”之后的新一轮国家级战略抓手。这份文件的关键词已经不再是“连接”与“优化”&#xff0c;而是“重塑”与“跃迁”&#…

2025年华为HCIA人工智能认证发展前景如何?客观分析!

大家好&#xff01;7月世界人工智能大会即将揭幕首款重载机器人&#xff0c;AI产业化进程再次加速。不少朋友开始转移关注到和它有一点点关系的——华为HCIA-AI Solution认证&#xff08;人工智能解决方案工程师&#xff09;&#xff0c;但它是否真能搭上这趟技术快车&#xff…

AutoGPT 原理与实践:从AI助理到“自主任务完成者” (人工智能入门系列)

Elon Musk 曾预言&#xff0c;“AIAgent 终将比人类聪明&#xff0c;并能自动完成大部分工作&#xff0c;这既是机遇也是威胁。” 而 AutoGPT&#xff0c;正是当前 AI 领域涌现出的、最能体现这一预言雏形的产品。它不再是那个需要你一句一句精确指令的“AI助手”&#xff0c;而…

自适应滤波器:Ch4 最小均方(LMS)算法

随机梯度下降算法简介 之前的章节中介绍了利用最速下降算法可以实现维纳滤波器的最优解&#xff08;LMMSE&#xff09;&#xff0c;其最优解的形式为&#xff1a; w0R−1Pw_{0} R^{- 1}Pw0​R−1P 它基于两个假设&#xff1a;环境的联合平稳&#xff0c;即输入u(n)u(n)u(n)以及…

AI生成内容的版权问题解析与实操指南

针对个人使用AI工具生成视频/音乐的版权问题深度解析&#xff0c;从法律归属、侵权边界到确权实操&#xff0c;结合最新司法实践提炼核心要点&#xff1a; 一、版权归属核心逻辑&#xff1a;人类智力投入的可视化 当用户深度参与创作过程时&#xff0c;可主张版权。关键看操作…

4.2 机器学习 - 欠拟合和过拟合

模型训练的核心挑战是让模型既 “学好” 训练数据&#xff0c;又能 “适应” 新数据。欠拟合&#xff08;Underfitting&#xff09;和过拟合&#xff08;Overfitting&#xff09;是阻碍这一目标的两大典型问题&#xff0c;其本质是 “模型复杂度” 与 “数据复杂度” 不匹配。本…

LeetCode 468. 验证IP地址 - 详细解析

文章目录LeetCode 468. 验证IP地址 - 详细解析题目描述IPv4验证规则&#xff1a;IPv6验证规则&#xff1a;最优Java解决方案&#xff08;注释完整版&#xff09;关键变量含义及代码技巧代码技巧详解1. 前导零检查的最佳实践2. IPv6为什么不能用Character.isDigit()3. 针对性注释…

新能源研发,用新型实验记录本:ELN

新能源&#xff08;材料&#xff09;研发如火如荼&#xff0c;竞争激烈。以电池为例&#xff0c;新能源汽车的崛起、储能技术的突破&#xff0c;让电池成为了能源领域的“新宠”。电池研发已经成为热门赛场&#xff0c;各研发团队都在与时间赛跑&#xff0c;试图维持优势或弯道…

大语言模型领域最新进展

CSDN大礼包《人工智能大模型课程》 CSDN大礼包《人工智能平台设计开发课程课程》

【网安干货】--计算机网络知识梳理总结(二)

这是计算机网络知识梳理的第二篇&#xff0c;真正去梳理才发现内容好多好多好多好多好多啊…怕是预计要写四篇 注意&#xff1a;如果看不清可以右键复制图片链接到浏览器访问或另存为照片并放大查看 计算机网络2 计算机网络协议2.1 网络协议的定义与核心要素2.1.1 协议的定义2.…

百度前端社招面经二

社招 百度 前端开发 二面 base 北京 react 17 和 18 的差异react的响应式原理&#xff0c;js是如何驱动模块的webpacke 4 和 5 差异webpacke 热更新原理。Tree Shaking 是干嘛的import 和 require 区别&#xff0c;都会被Tree Shaking吗隐藏元素的几种方式三栏布局&#xff0c;…

结合prompt分析NodeRAG的build过程

之前介绍了NodeRAG的节点类型和安装过程。 linux环境conda安装NodeRAG示例-CSDN博客 这里尝试从prompt代码角度分析NodeRAG如何将文档转化为节点、关系。 1 整体处理流程 NodeRAG定义了如下所示状态及处理流程。 # define the state to pipeline mapping self.state_pipelin…

我改写的二分法XML转CSV文件程序速度追上了张泽鹏先生的

以下是美团龙猫初稿&#xff0c;我改正&#xff0c;DeepSeek重新格式化的代码。 重要改正点&#xff1a; 1.二分查找用goto控制迭代&#xff0c;返回<row的正确位置 2.在缓冲区头填上父标签使expat能连续解析不报错 #include <stdio.h> #include <stdlib.h> #in…

使用Docker安装Stirling-PDF(PDF工具)

1、官方Web端 详见&#xff1a;https://stirlingpdf.io/?langzh_CN 2、安装Docker 合集&#xff1a;Docker安装与使用 3、安装Stirling-PDF 详见&#xff1a; https://docs.stirlingpdf.com/Installation/Docker%20Install https://hub.docker.com/r/stirlingtools/stirli…

【开题答辩全过程】以 基于微信小程序的“XIN”学生组织管理系统为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人&#xff0c;语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…

Iwip驱动8211FS项目——MPSOC实战1

硬件设计采用RTL8211FS芯片&#xff0c;vitis默认的IWIP库不支持此芯片。 网口相关知识可以翻看前期文章 以太网PHY_MDIO通信&#xff08;基于RTL8211&#xff09;--FPGA学习笔记22-CSDN博客 以太网ARP协议——FPGA学习笔记23_fpga以太网学习-CSDN博客 以太网ICMP协议(ping…

《Science》神经炎症综述思路套用:从机制到跨领域研究范式

2025 年 6 月首都医科大学团队在《Science》发表的综述《Immunological dimensions of neurological disease: from mechanisms to therapeutics》(神经疾病的免疫维度:从机制到疗法),系统性解析了神经炎症的动态演变规律与双面性,提出阶段化、精准化治疗新范式。本文基于…