LeetCode 199. 二叉树的右视图

news2024/9/21 2:42:14

199. 二叉树的右视图

描述

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

示例

示例1
示例1

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

示例2

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

示例3

输入:root = []
输出:[]

链接

https://leetcode.cn/problems/binary-tree-right-side-view/

解题思路

思路一: 广度优先遍历

层序遍历的时候,判断是否遍历到单层的最后面的元素,如果是,就放进result数组中,随后返回result就可以了。

/**
 * @param {TreeNode} root
 * @return {number[]}
 */
var rightSideView = function(root) {
    if (root === null) return [];
    var res = [], queue = [root];
    while(queue.length) {
        var currentLevelSize = queue.length; 
        for (var i = 0 ;i < currentLevelSize; i++) {
            var node = queue.shift();
            // 将当前层的最后一个节点放入结果列表
            (i == currentLevelSize - 1) && res.push(node.val);
            if (node.left != null) queue.push(node.left);
            if (node.right != null) queue.push(node.right);
        }
    }
    return res;
};

时间复杂度: O(n), 其中 n 是二叉树的节点数
空间复杂度: O(n)

思路二: 深度优先搜索

思路: 我们按照 「根结点 -> 右子树 -> 左子树」 的顺序访问,就可以保证每层都是最先访问最右边的节点的。

(与先序遍历 「根结点 -> 左子树 -> 右子树」 正好相反,先序遍历每层最先访问的是最左边的节点)

/**
 * @param {TreeNode} root
 * @return {number[]}
 */
var rightSideView = function (root) {
  if (root === null) return [];
  var res = [];
  var dfs = function (node, depth) {
    if (node === null) return;
    // 如果当前节点所在深度还没有出现在res里,说明在该深度下当前节点是第一个被访问的节点,因此将当前节点加入res中。
    if (depth == res.length) {
      res.push(node.val);
    } 
    // 先访问 当前节点,再递归地访问 右子树 和 左子树
    dfs(node.right, depth + 1);
    dfs(node.left, depth + 1);
  }
  dfs(root, 0);
  return res;
}

时间复杂度: O(n), 其中 n 是二叉树的节点数
空间复杂度: O(n)

参考资料

https://leetcode.cn/problems/binary-tree-right-side-view/solution/jian-dan-bfsdfs-bi-xu-miao-dong-by-sweetiee/

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

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

相关文章

【笔试强训选择题】Day14.习题(错题)解析

作者简介&#xff1a;大家好&#xff0c;我是未央&#xff1b; 博客首页&#xff1a;未央.303 系列专栏&#xff1a;笔试强训选择题 每日一句&#xff1a;人的一生&#xff0c;可以有所作为的时机只有一次&#xff0c;那就是现在&#xff01;&#xff01;&#xff01; 文章目录…

Linux环境搭建与历史

目录 前言 1.操作系统是什么 2. 为什么我们要选择Linux 3.Linux操作系统发展历史 4.企业应用现状 Linux在服务器领域的发展 Linux在桌面领域的发展 Linux在移动嵌入式领域的发展 Linux在云计算/大数据领域的发展 5.发行版本 6. Linux环境配置 6.1 Linux搭建的方式 …

程序员挣够了钱,到中年你还害怕失业吗?

最近一刷知乎全部都是大龄程序员失业危机 真的有这么可怕吗&#xff1f; 程序员35岁就真的到了瓶颈期&#xff1f; 我不这么认为 挣够了钱&#xff0c;当然不可怕&#xff0c;问题是没挣够啊~&#xff01;&#xff01;&#xff01; 按题主的算法是&#xff0c;大城市薪资1…

C++基础STL-map容器

map容器介绍&#xff1a; 作为关联式容器的一种&#xff0c;map 容器存储的都是 pair 对象&#xff0c;也就是用 pair 类模板创建的键值对。其中&#xff0c;各个键值对的键和值可以是任意数据类型&#xff0c;包括 C基本数据类型&#xff08;int、double 等&#xff0…

快速入门matlab——变量练习

学习目标&#xff1a;1.掌握matlab编程中最常用的几种变量类型 2.对变量类型的属性有所熟悉&#xff0c;不要求记忆&#xff0c;知道了解即可 3.要求熟练运用这几种变量类型创建自己的变量 clear all; % 清除Workspace中的所有…

服务网格:优化微服务通信与保障系统安全性的架构利器

文章目录 服务网格&#xff1a;优化微服务通信与保障系统安全性的架构利器1. 什么是服务网格&#xff1f;微服务架构概述&#xff1a;服务网格的定义和作用&#xff1a; 2. 服务网格的特点&#xff1a;透明性&#xff1a;无需修改应用代码服务发现与负载均衡&#xff1a;动态发…

GPT3.5 VS GPT-4写领导讲话稿,谁是最强笔杆子?

正文共 1240 字&#xff0c;阅读大约需要 5 分钟 文秘/公务员必备技巧&#xff0c;您将在5分钟后获得以下超能力&#xff1a; 快速生成领导讲话稿 Beezy评级 &#xff1a;B级 *经过简单的寻找&#xff0c; 大部分人能立刻掌握。主要节省时间。 推荐人 | Kim 编辑者 | Linda ●…

redis持久化配置

回顾&#xff1a;rpcbind111 nfs2049 redis高可用高可用是指服务器可以正常访问的时间&#xff0c;衡量的标准是在多长时间内可以提供正常服务&#xff08;99.9%&#xff0c;99.99%&#xff0c;99.999%等&#xff09; 还要考虑提供主从分离&#xff0c;快速容灾技术&#…

在 React 中使用 highlight.js 和 Clipboard.js 实现代码块和复制功能

参考链接&#xff1a;https://blog.csdn.net/huangjuan0229/article/details/130319050 在前端开发中&#xff0c;代码块高亮和复制功能是十分常见的需求。而在 React 中&#xff0c;常用的代码高亮库是 highlight.js&#xff0c;常用的复制库是 Clipboard.js。本篇文章将介绍…

新版 钥证书模式加签模式支付宝官方支付对接·错误代码 missing-signature 错误原因: 缺少签名参数 解决方案

新版密钥证书加签模式支付宝官方支付对接错误代码 missing-signature 错误原因: 缺少签名参数 解决方案 大家好我是优雅草伊凡&#xff0c;最近处理的问题特别多每天忙得不可开交&#xff0c;但是我相信后续要写的内容和记录下的问题是越来越多了&#xff0c;其他同事忙着开发…

10-02 单元化架构核心问题与概念

单元化架构产生的原因 应对增长 传统架构无法处理日益增长的互联网用户需求扩容 需要新架构更近一部提升了系统的扩展能力系统稳定性 新架构需要高可用、相对独立和故障隔离使整体系统更稳定灰度发布 系统和组件都纳入版本管理&#xff0c;按需部署进行灰度发布 核心问题 应…

成都待慕电商:抖音百亿现金扶持商家

新京报贝壳财经讯5月16日&#xff0c;抖音电商在广州举办第三届生态大会。抖音电商总裁魏雯雯透露&#xff0c;过去一年&#xff0c;抖音电商GMV&#xff08;商品交易总额&#xff09;同比增长80%&#xff0c;其中&#xff0c;货架场景GMV占比达30%&#xff0c;平台售出超300亿…

公司新招了个字节拿36K的人,让我见识到了什么才是测试扛把子......

5年测试&#xff0c;应该是能达到资深测试的水准&#xff0c;即不仅能熟练地开发业务&#xff0c;而且还能熟悉项目开发&#xff0c;测试&#xff0c;调试和发布的流程&#xff0c;而且还应该能全面掌握数据库等方面的技能&#xff0c;如果技能再高些的话&#xff0c;甚至熟悉分…

【目标检测】基于yolov5的交通标志检测和识别(可识别58种类别,附代码和数据集)

写在前面: 首先感谢兄弟们的订阅,让我有创作的动力,在创作过程我会尽最大能力,保证作品的质量,如果有问题,可以私信我,让我们携手共进,共创辉煌。 文末附项目代码和数据集,请看检测效果: 1. 介绍 YOLOv5是一种用于目标检测的深度学习算法,它能够在高速和高精度的情…

Spring中的@Value注解详解

Spring中的Value注解详解 概述 本文配置文件为yml文件 在使用spring框架的项目中&#xff0c;Value是经常使用的注解之一。其功能是将与配置文件中的键对应的值分配给其带注解的属性。在日常使用中&#xff0c;我们常用的功能相对简单。本文使您系统地了解Value的用法。 Value…

人工智能的新时代:讯飞星火大模型Vs ChatGPT

近日&#xff0c;科大讯飞召开了星火认知大模型成果发布会&#xff0c;会上表示讯飞星火大模型将突破开放式问答&#xff0c;对标ChatGPT&#xff0c;在中文能力上超过ChatGPT&#xff0c;在英文能力上与ChatGPT相当。对此&#xff0c;你怎么看&#xff1f; 一、你有使用过这种…

在 Golang 中执行 Shell 命令

原文标题&#xff1a;Executing Shell Commands in Golang 作者&#xff1a;Soham Kamani 之前自己也写过 os/exec 包执行 Shell 命令的文章&#xff0c;但是没有这篇讲的详细&#xff0c;感兴趣可以看看&#xff0c;点此处。 在本教程中&#xff0c;我们将学习如何在 Golang …

融云 WICC 2023 定档!「出海嘉年华」穂城来袭!

集赞获纸质版《作战地图》 阔别一年&#xff0c;通信行业年度盛会 WICC 即将重磅回归。移步【融云全球互联网通信云】回复“地图”免费领 6 月 2 日&#xff08;周五&#xff09;&#xff0c;融云与白鲸出海联合主办、以“聚势突围&#xff0c;布局全球”为主题的“WICC 社交…

进程线程常见面试题及基础知识

1 进程 我们编写的代码只是一个存储在硬盘的静态文件&#xff0c;通过编译后就会生成二进制可执行文件&#xff0c;当我们运行这个可执行文件后&#xff0c;它会被装载到内存中&#xff0c;接着 CPU 会执行程序中的每一条指令&#xff0c;那么这个运行中的程序&#xff0c;就被…

一起内核线程异常占用CPU资源的排查过程

1、软硬件环境 硬件&#xff1a; NXP LS1043A 4核 cortex-A53 软件&#xff1a; linux 5.10.35 2、问题现象 最近有个产品要把内核从4.19升级到 5.10.35版本&#xff0c;产品在内核版本4.19工作正常&#xff0c;升级到5.10.35以后&#xff0c;产品在不接任何外设&#xff0c;…