每日一练:二叉树的右视图

news2024/9/27 4:24:08

199. 二叉树的右视图 - 力扣(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 

二、解法1-层序遍历 O(N)

        这个题可以用层序遍历来完成,但是方向是从右向左进行,只将每层的第一个节点放入数组中。

class Solution {
public:
    vector<int> rightSideView(TreeNode* root) {
        vector<int> ret;
        queue<TreeNode*> q1;
        q1.push(root);
        while(!q1.empty())
        {
            queue<TreeNode*> q2;
            int oldLen = ret.size();
            while(!q1.empty())
            {
                root = q1.front();
                q1.pop();
                if(root != nullptr)
                {
                    q2.push(root->right);
                    q2.push(root->left);
                    if(ret.size() == oldLen)
                        ret.push_back(root->val);
                }
            }
            q1 = q2;
        }
        return ret;
    }
};

三、解法2-递归 O(N)

        从最右路径遍历,然后遍历次右路径,最后遍历最左路径,如果某条路径比它所有右边路径中的最长路径还要长,那么多出来的节点就是右视图能看见的,将其加入结果中。

class Solution {
public:
    void _rightSideView(TreeNode* root,int deep)
    {
        if(root == nullptr)
            return;
        if(deep > maxDeep) // 当前深度比左边路径的最长路径还要深
        {
            maxDeep = deep; // 更新最大深度
            ret.push_back(root->val); // 将当前节点加入结果
        }
        _rightSideView(root->right,deep+1); // 先遍历右路径
        _rightSideView(root->left,deep+1);  // 后遍历左路径
    }
    vector<int> rightSideView(TreeNode* root) {
        _rightSideView(root,1);
        return ret;
    }
private:
    int maxDeep = 0; // 最大深度
    vector<int> ret;
};

        递归的迭代版本:

class Solution {
public:
    vector<int> rightSideView(TreeNode* root) {
        stack<pair<TreeNode*, int>> s; // 存储节点和节点的当前深度
        s.push({root, 1});
        int maxDeep = 0; // 最大深度
        vector<int> ret;
        while (!s.empty()) {
            if (s.top().first) {
                root = s.top().first;
                int deep = s.top().second;
                s.pop();
                if (root != nullptr) {
                    if (deep > maxDeep) {
                        maxDeep = deep;
                        ret.push_back(root->val);
                    }
                    s.push({root->left, deep + 1});
                    s.push({root->right, deep + 1});
                }
            }
            else
                s.pop();
        }
        return ret;
    }
};

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

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

相关文章

超详细的 pytest教程 之前后置方法和 fixture 机制

前言 这一篇文章专门给大家讲解pytest中关于用例执行的前后置步骤处理,pytest中用例执行的前后置处理既可以通过测试夹具(fixtrue)来实现&#xff0c;也可以通过xunit 风格的前后置方法来实现。接下来我们一起看看如何具体使用。 一、xunit 风格的前后置方法 1、函数用例的前…

基于STM32的智能家庭安全监控系统

目录 引言项目背景环境准备 硬件准备软件安装与配置系统设计 系统架构关键技术代码示例 传感器数据采集摄像头监控与数据处理实时报警功能实现应用场景结论 1. 引言 智能家庭安全监控系统使用嵌入式设备&#xff0c;如STM32微控制器&#xff0c;来实时监控家庭环境。通过集成…

[教程]如何在iPhone上启用中国移动/联通/电信RCS消息

目前 苹果已经在 iOS 18 中带来 RCS 富媒体消息的支持&#xff0c;该消息基于网络传递&#xff0c;用户可以通过 RCS 免费将消息发送到其他 iPhone 或 Android 设备。在苹果面向测试版用户推出的 iOS 18.1 Beta 版中&#xff0c;中国网络运营商包括中国移动、中国联通、中国电信…

文献笔记 - Ground effect on rotorcraft unmanned aerial vehicles: a review

这篇博文是自己看文章顺手做的笔记 只是简单翻译和整理 仅做个人参考学习和分享 如果作者看到觉得内容不妥请联系我 我会及时处理 本人非文章作者&#xff0c;文献的引用格式如下&#xff0c;原文更有价值 摘要—— 收集和讨论小型多旋翼无人机受地面效应的影响&#xff0c;…

阿b的弹幕如何获取?这个可以帮到你!

弹幕 前几天&#xff0c;做了一个b站弹幕的爬取&#xff0c;只需要输入一个bv号&#xff0c;就可以查看这个视频的弹幕&#xff0c;并且提供了一种可以写入到文件的方法。但是有人反应&#xff0c;这种使用仍然非常困难&#xff0c;应该提供一个更加友好的用户界面。 因此本期…

共享单车轨迹数据分析:以厦门市共享单车数据为例(八)

副标题&#xff1a;基于POI数据的站点综合评价——以厦门市为例&#xff08;三&#xff09; 什么是优劣解距离法&#xff08;TOPSIS&#xff09;&#xff1f; 优劣解距离法&#xff08;Technique for Order Preference by Similarity to Ideal Solution&#xff0c;简称TOPSI…

借用连接2-得到主库或从库池子连接

二、借用连接--AbstractRoutingDataSource类 目的&#xff1a;基于look up data&#xff0c;然后从目标数据源借用连接 注look up key确定走主 or 从数据库连接池代码开发&#xff1a; 1.定义子类继承AbstractRoutingDataSource&#xff0c;并覆写determineCurrentLookupKey方…

Vue3+Element-UI Plus登录静态页

<script setup> import {reactive, ref} from "vue";const formRefref() const formModelreactive({username:,password: }) const formRulesreactive({username:[{required:true,message:请输入账号,trigger:blur}],password:[{required:true,message:请输入密…

深圳前湾地铁附近的13元一份的工地盒饭

因为深圳前海这边有很多工地&#xff0c;所以也存在很多的工地餐厅。发现价格出奇统一&#xff0c;都是13元一份。主打一个量大管饱还下饭&#xff0c;每次都吃得有些撑。前海写字楼下的底商也很多打工人的干饭餐厅&#xff0c;但是工作餐均价都要30。如果不在餐厅吃&#xff0…

高通AI应用程序开发3:网络模型(一)

1. 支持的网络模型 Qualcomm神经处理SDK支持下表所列的网络模型。 有关支持的运行时和单个图层类型的限制和约束的详细信息&#xff0c;请参阅 限制 。 GPU运行时中支持的所有层对两种GPU模式都有效&#xff1a;GPU_FLOAT32_16_HYBRID和GPU_FLAAT16。GPU_FLOAT32_16_HYBRID-…

3分钟!手把手教你学会如何无损放大图片

我们常常遇到需要放大图片却又不希望损失画质的尴尬境地。无论是为了打印大幅海报、在线展示高清细节&#xff0c;还是想要修复珍贵的老照片&#xff0c;无损放大图片成为了许多人的迫切需求。下面给大家分享一款最新无损放大图片软件&#xff0c;高效且实用&#xff0c;一起来…

VMware搭建DVWA靶场

目录 1.安装phpstudy 2.搭建DVWA 本次搭建基于VMware16的win7系统 1.安装phpstudy 下载windows版本&#xff1a;小皮面板-好用、安全、稳定的Linux服务器面板&#xff01; 安装后先开启mysql再开启apache&#xff0c;遇到mysql启动不了的情况&#xff0c;最后重装了phpstud…

如何在Windows和Linux之间实现粘贴复制

第一步 sudo apt-get autorremove open-vm-tools第二步 sudo apt-get update第三步 sudo apt-get install open-vm-tools-desktop第四步 一直按Y&#xff0c;希望执行 Y第四步 重启 reboot然后可以实现粘贴复制。

国内外AI大模型对比,国产AI的优势是什么?非常详细收藏我这一篇就够了

AI正在以惊人的速度改变各行各业的运作方式。 热点趋势解读之AI系列&#xff0c;将通过多篇文章探讨如何利用AI驱动创新、提升效率&#xff0c;并为未来的商业和社会发展提供无限可能。 篇章五&#xff1a;国内外AI大模型哪家强&#xff1f; > 设为星标公众号&#xff0c…

我校教师当选为中国计算机学会(CCF)杰出会员

近日&#xff0c;中国计算机学会&#xff08;CCF&#xff09;会员评选委员会发来贺信&#xff0c;祝贺我校信息技术学院大数据技术科研创新团队负责人陈天伟老师当选CCF杰出会员(CCF Distinguished Membership)&#xff0c;并高度评价了陈天伟的专业造诣和长期以来对CCF发展的贡…

Navicat连接数据库

一、MySQL地卸载&#xff1a; 二、Navicat连接数据库&#xff1a; 安装navicat的安装&#xff1a; 错误解决方法&#xff1a; 实验过程&#xff1a; 在本地sql数据库可以访问&#xff0c;说明数据库开启 用navicat连接&#xff1a;出现问题&#xff1a; 将mysql用户登录的加密…

欧洲欧盟药品数据库:EMA、HMA、EDQM-一键查询

在过去的一段时间里&#xff0c;我坚持不懈地每天下午都向那些精通欧洲法规注册的同事请教&#xff0c;学习EU的注册法规&#xff0c;收获颇丰。作为一个对知识充满渴望的求学者&#xff0c;今天我愿意将我学到的心得体会分享给大家&#xff0c;希望你们能够喜欢。 几个月前&a…

App推广新利器:Xinstall应用间跳转,转化效率翻倍

在移动互联网时代&#xff0c;App已成为我们生活中不可或缺的一部分。然而&#xff0c;随着App数量的不断增加&#xff0c;用户在使用过程中经常需要在多个应用之间切换&#xff0c;这不仅影响了用户体验&#xff0c;还降低了App的转化效率。今天&#xff0c;就让我们一起了解一…

多层感知机——pytorch与paddle实现多层感知机

多层感知机——pytorch与paddle实现多层感知机 本文将深入探讨多层感知机的理论基础&#xff0c;并通过PyTorch和PaddlePaddle两个深度学习框架来展示如何实现多层感知机模型。我们将首先介绍多层感知机、优化的基本概念&#xff0c;这些数学工具是理解和实现多层感知机的基础…

Spring CloudAlibaba AI 问世了

Spring CloudAlibaba AI 问世了 背景介绍Spring AI 简介Spring Cloud Alibaba AI 简介 第一个Spring AI应用开发新建maven 项目添加依赖配置spring ai 的核心依赖仓库 参考 背景介绍 SpringAI 是Spring 官方社区项目&#xff0c;旨在简化 Java AI 应用程序开发&#xff0c;让 J…