HOT45-二叉树的右视图

news2024/12/23 17:07:58

        leetcode原题链接:二叉树的右视图

题目描述

       给定一个二叉树的 根节点 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 

解题方法:二叉树的右视图,简单来说就是将每一层最右边的节点取出合并。我们实现上采用队列,按照先右孩子节点、后左孩子节点的方式将队首元素压入队列中。这样每层第一个元素就是该层的最右边的元素。

C++代码

#include <iostream>
#include <queue>
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    vector<int> rightSideView(TreeNode* root) {
        if (!root) {
            return {};
        }
        std::queue<TreeNode*> q;
        std::vector<int> result;
        q.emplace(root);
        while (!q.empty()) {
            int q_size = q.size();
            TreeNode *p_front = q.front();// 每一层右边第一个节点为右视图对应层的节点
            if (p_front != nullptr) {
                result.emplace_back(p_front->val);
            }
            for (int i = 0; i < q_size; i++) { //将当前层的节点全部弹出
                p_front = q.front();//将队列中每个节点按照从右向左的方式压入下一层
                q.pop();//弹出队首元素
                if (p_front != nullptr && p_front->right) {
                    q.emplace(p_front->right);//先存右节点
                }
                if (p_front != nullptr && p_front->left) {
                    q.emplace(p_front->left);//先存左节点
                }
            }
        }
        return result;
    }
};

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

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

相关文章

django celery简单 例子

django celery简单 例子 https://docs.celeryq.dev/en/latest/django/first-steps-with-django.html pip list pip install Django4.2.3 pip install redis4.6.0 pip install celery5.3.1 pip install SQLAlchemy2.0.17 source demo1_venv/bin/activate django-admin start…

激光雷达在ADAS测试中的应用与方案

在科技高速发展的今天&#xff0c;汽车智能化已是必然的趋势&#xff0c;且自动驾驶汽车的研究也在世界范围内进行得如火如荼。而在ADAS测试与开发中&#xff0c;激光雷达以其高性能和高精度占据着非常重要的地位&#xff0c;它是ADAS测试与开发中不可缺少的组成。 一 激光雷达…

sendRedirect进行页面重定向无反应

问题 sendRedirect进行页面重定向无反应 详细问题 笔者使用ServletJSP作为技术框架&#xff0c;使用AJAX进行数据请求&#xff0c;后程序运行完成 response.sendRedirect("请求链接");并没有按照笔者预期&#xff0c;进行页面重定向 请求端核心代码 $.ajax({url…

nginx报403 Forbidden错误

nginx是以root启动的&#xff0c;将 "user nobody" 改为 "user root" 刷新一下配置&#xff1a; /usr/local/nginx/sbin/nginx -t /usr/local/nginx/sbin/nginx -s reload

PCL点云处理之细小空洞填补 (一百九十八)

PCL点云处理之细小空洞填补 (一百九十八) 一、算法介绍二、具体实现1.代码2.结果一、算法介绍 点云扫描过程中,由于遮挡或其他原因,可能存在一些细小空洞,有可能造成数据处理上一些问题,这里介绍一种填补细小空洞的方法。具体方法和效果如下所示 二、具体实现 1.代码…

SpringBoot3【⑤ 核心原理】

1. 事件和监听器 1. 生命周期监听 场景&#xff1a;监听应用的生命周期 1. 监听器-SpringApplicationRunListener 自定义SpringApplicationRunListener来监听事件&#xff1b; 1.1. 编写SpringApplicationRunListener 这个接口的实现类 1.2. 在 META-INF/spring.factories …

前端Vue组件Mixin技术

前端vue组件开发的一大优势在于可以提高代码的复用性。极大的提升开发效率&#xff0c;通过Mixin技术&#xff0c;我们可以实现类似继承的效果&#xff0c;组件的复用性可以得到加强。 当我们开发前端项目时&#xff0c;可能会定义非常多的组件&#xff0c;这些组件中可能有部…

SpringBoot3【⑥ 场景整合:①NoSQL:Redis】

0. Docker安装 输入如下参数 sudo yum install -y yum-utilssudo yum-config-manager \--add-repo \https://download.docker.com/linux/centos/docker-ce.reposudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-pluginsudo syst…

Jupyter Notebook的内核添加新的虚拟环境

最近&#xff0c;在搭建环境的时候发现 Jupyter Notebook 的内核只有基础的python和pytorch&#xff0c;现在我想要在 Jupyter Notebook 中使用新的虚拟环境。 下面是解决的方法&#xff1a; &#xff08;1&#xff09;首先在Anaconda Prompt中激活虚拟环境&#xff0c;比如我…

Android TV:自定义Leanback的VideoDetailsFragment

在Android studio新建TV项目的demo上做修改,实现一下需求: 1、去掉顶部背景区域 2、修改中间详情区域高度 3、修改整体背景界面 效果如图: 搜遍全网,没有找到一个解决方案。只能考自己看代码来自定义实现了。 1、去掉顶部背景区域: VideoDetailsFragment中重写setupD…

SpringBoot 的 概念、创建和运行

目录 1.什么是Spring Boot&#xff1f; 为什么要学Spring Boot&#xff1f; SpringBoot的优点 Spring Boot 项目创建 前置工作&#xff1a;配置国内源 使用 idea 创建 Spring Boot 项目 网页版创建&#xff08;了解&#xff09; 拓展&#xff1a;删除 项目中无用的目录和…

Matlab学习-轨迹热力图绘制

Matlab学习-轨迹热力图绘制 参考链接&#xff1a; MathWork-scatter函数使用 问题需求&#xff1a; 需要将轨迹上的点另一维信息同时显示在图上&#xff0c;比如横纵向误差等&#xff0c;这个时候画轨迹与误差的热力图就能很好同时反应位置和定位误差之间的关系&#xff1b;…

缓冲流~~

1&#xff1a;概述 缓冲流也称高效流&#xff0c;或者高级流。之前学习的字节流可以称为原始流。作用&#xff1a;缓冲流自带缓冲区&#xff0c;可以提高原始字节流&#xff0c;字符流读写数据的性能。 可以提高读写数据的效率。它通过在内存中创建缓冲区来减少对底层数据源的…

MATLAB图像处理实现高光抑制

下面是的几个用MATLAB进行高光抑制的处理例子。 1. 基于最大值滤波的亮光抑制方法 原理是用某像素周围一定大小的邻域中的最大值减去该像素值&#xff0c;可达到亮光抑制的效果。在MATLAB中&#xff0c;可以使用mat2gray函数将图像归一化后&#xff0c;再使用imextendedmax函…

Android Stuido Proguard Retrace Unscrambler直接reProguard反混淆retrace日志

Android Stuido Proguard Retrace Unscrambler直接reProguard反混淆retrace日志 &#xff08;1&#xff09;如果Android Studio里面没有安装下列插件之一的&#xff0c;在Settings的Plugins里面安装其中一个&#xff1a; &#xff08;2&#xff09;菜单栏中的code里面找到反混…

sphinx pdoc 生成API文档

文章目录 sphinxinstall pdoc sphinx install pip install sphinx sphinx_rtd_theme sphinx-autobuild pip install recommonmark sphinx_markdown_tables sphinx-quickstart 选 y Project language [en]: zh_CN conf.py: import sys sys.path.append(..)extensions [sph…

Word公式大括号左对齐

1、大括号公式如下&#xff1a; 2、依次选中每一行&#xff0c;然后在开头输入一个&&#xff0c;然后回车&#xff1a; 3、当最后一行输入完立马可以发现左对齐了&#xff1a; The higher I got, the more amazed I was by the view.

docker安装maven私服nexus及其配置使用

目录 docker搭建nexus登录私服管理后台重置admin密码 配置仓库 docker搭建nexus 下载 Nexus3 镜像 docker pull sonatype/nexus3创建宿主机挂载目录 mkdir –vp /usr/local/nexus-data记得修改权限 chmod 775 /usr/local/nexus-data创建 Nexus3 容器 docker run --privile…

C# 使用HttpListener时候异常(此平台不支持此操作:System.PlatformNotSupportedException)

C# 使用HttpListener时候异常&#xff08;此平台不支持此操作&#xff1a;System.PlatformNotSupportedException&#xff09; 代码&#xff1a; HttpListener listener new HttpListener(); 错误&#xff1a; System.PlatformNotSupportedException: Operation is not su…

采用匿名内部类形式定义Handler有什么不妥?

写这篇博客&#xff0c;是为分析Handler引起内存泄漏做准备。 目录 匿名内部类的含义是什么&#xff1f;匿名内部类的三种情况非静态内部类为什么会持有外部类的引用&#xff1f; 匿名内部类的含义是什么&#xff1f; 首先是内部类&#xff0c;&#xff08;内部类不难理解&am…