NC输出二叉树的右视图

news2024/9/27 23:21:54

系列文章目录


文章目录

  • 系列文章目录
  • 前言


前言

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。
在这里插入图片描述


描述
请根据二叉树的前序遍历,中序遍历恢复二叉树,并打印出二叉树的右视图
如输入[1,2,4,5,3],[4,2,5,1,3]时,通过前序遍历的结果[1,2,4,5,3]和中序遍历的结果[4,2,5,1,3]可重建出以下二叉树:在这里插入图片描述

所以对应的输出为[1,3,5]。
在这里插入图片描述

class Solution {
public:
    //建树函数
    //四个int参数分别是先序最左结点下标,先序最右结点下标
    //中序最左结点下标,中序最右结点坐标
    TreeNode* buildTree(vector<int>& xianxu, int l1, int r1, vector<int>& zhongxu, int l2, int r2) 
    {
        if(l1 > r1 || l2 > r2)
            return NULL;
        TreeNode* root = new TreeNode(xianxu[l1]);    //构建节点
        int rootIndex = 0;    //用来保存根节点在中序遍历列表的下标
        //寻找根节点
        for(int i = l2; i <= r2; i++)
        {
            if(zhongxu[i] == xianxu[l1])
            {
                rootIndex = i;
                break;
            }
        }
        int leftsize = rootIndex - l2;    //左子树大小
        int rightsize = r2 - rootIndex;    //右子树大小
        //递归构建左子树和右子树
        root->left = buildTree(xianxu, l1 + 1, l1 + leftsize, zhongxu, l2 , l2 + leftsize - 1);
        root->right = buildTree(xianxu, r1 - rightsize + 1, r1, zhongxu, rootIndex + 1, r2);
        return root;
    }
    //深度优先搜索函数
    vector<int> rightSideView(TreeNode* root) {
        unordered_map<int, int> mp;//右边最深处的值
        int max_depth = -1; //记录最大深度
        stack<TreeNode*> nodes; //维护深度访问结点
        stack<int> depths;  //维护深度时的深度
        nodes.push(root); 
        depths.push(0);
        while (!nodes.empty()){
            TreeNode* node = nodes.top();
            nodes.pop();
            int depth = depths.top();
            depths.pop();
            if (node != NULL) {
                // 维护二叉树的最大深度
                max_depth = max(max_depth, depth);
                // 如果不存在对应深度的节点我们才插入
                if (mp.find(depth) == mp.end())
                    mp[depth] =  node->val;
                nodes.push(node->left);
                nodes.push(node->right);
                depths.push(depth + 1);
                depths.push(depth + 1);
            }
        }
        vector<int> res;
        for (int i = 0; i <= max_depth; i++)
            res.push_back(mp[i]);
        return res;
    }
    vector<int> solve(vector<int>& xianxu, vector<int>& zhongxu) {
        vector<int> res;
        if(xianxu.size() == 0) //空结点
            return res;
        //建树
        TreeNode* root = buildTree(xianxu, 0, xianxu.size() - 1, zhongxu, 0, zhongxu.size() - 1);
        //找每一层最右边的结点
        return rightSideView(root);
    }
};

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

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

相关文章

QXDM 如何更新软件?

如何更新QXDM等高通软件&#xff1f;之前做过这个事情&#xff0c;但过几个月给别人讲的时候就忘记了&#xff0c;特做如下记录。 一. 背景知识&#xff1a; 1. QXDM 依赖于Qualcomm package Managers 3(QPM in short)。 目前的时间是2024年9月15日&#xff0c;但不知从何…

华为OD机试 - 找出作弊的人(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试真题&#xff08;Python/JS/C/C&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加入华为OD刷题交流群&#xff0c;…

门店引流神器异形创意LED圆形(饼/盘)显示屏使商业广告更有吸引力

在当今这个信息爆炸的时代&#xff0c;商业竞争日益激烈&#xff0c;如何在众多商家中脱颖而出&#xff0c;吸引顾客的注意力&#xff0c;成为了每个商家亟待解决的问题。而在这个视觉为王的时代&#xff0c;一种创新的门店引流神器——异形创意LED圆形&#xff08;饼/盘&#…

【案例72】Apache检测到目标 URL 存在 http host 头攻击漏洞的解决方案

在网络安全中&#xff0c;我们经常会遇到各种漏洞和攻击&#xff0c;其中 http host 头攻击漏洞是一种比较常见的安全问题。最近&#xff0c;我在处理一个项目时&#xff0c;检测到目标 URL 存在 http host 头攻击漏洞&#xff0c;下面我将分享两种Apache解决这个问题的方法。 …

强烈建议!所有Python基础差的同学,死磕这本64页的背记手册

关于Python书籍的推荐&#xff0c;特别是针对Python背记手册这一类别&#xff0c;虽然直接名为“Python背记手册”的书籍可能不常见&#xff0c;但存在多本详尽的Python学习资料&#xff0c;旨在帮助学习者系统地掌握Python语言的基础知识和进阶技能&#xff0c;这些书籍或资料…

【stm32笔记】使用rtt-studio与stm32CubeMx联合创建项目

使用rtt-studio与stm32CubeMx联合创建项目 创建rt-thread项目 设置项目信息 在项目资源管理器中“右击“&#xff0c;创建RRT studio 项目 双击“RT-Thread 项目“。 选择MCU&#xff0c;设置UART&#xff0c;以及调试方式。添加项目名称&#xff0c;点击“完成“按钮。 …

python画图|极坐标下的3D surface

前述学习过程中&#xff0c;我们已经掌握了3D surface的基本绘制技巧&#xff0c;详见链接&#xff1a; python画图|3D surface基础教程-CSDN博客 基础教程中的3D surface绘制位于笛卡尔坐标系&#xff0c;但有时候会用到极坐标绘图。虽然我们已经学过简单的极坐标绘图技巧&a…

C++: 二叉树进阶面试题

做每件事之前都心存诚意, 就会事半功倍. 目录 前言1. 根据二叉树创建字符串2. 二叉树的层序遍历Ⅰ3. 二叉树的层序遍历Ⅱ4. 二叉树的最近公共祖先5. 二叉搜索树与双向链表6. 根据一棵树的前序遍历与中序遍历构造二叉树7. 根据一棵树的中序遍历与后序遍历构造二叉树8. 二叉树的…

AMD FSR 4已秘密开发1年 支持AI帧生成

作为当今三大超分技术之一&#xff0c;AMD FSR曾经在第二代一度紧紧咬住NVIDIA DLSS&#xff0c;但是进入第三代之后反而差距拉大了&#xff0c;尤其是帧生成技术差了很多。AMD高级副总裁、计算与图形业务事业部总经理Jack Huynh近日透露&#xff0c;FSR 2/3并不是AMD真正想要的…

学习使用在windows系统上安装vue前端框架以及环境配置图文教程

学习使用在windows系统上安装vue前端框架以及环境配置图文教程 1、安装nodejs2、安装vue3、安装Vue-cli脚手架4、安装高版本5、创建vue项目6、启动项目7、配置开发环境8、发布项目 1、安装nodejs 点我查看教程 2、安装vue winR&#xff0c;打开cmd cnpm install vue -g表示安…

Golang数据流处理:掌握Reader和Writer接口的技巧

Golang数据流处理&#xff1a;掌握Reader和Writer接口的技巧 引言理解Reader和Writer接口Reader接口的定义和基本方法Writer接口的定义和基本方法 Reader接口的深入探讨Reader接口的实现示例使用io.Reader读取文件内容从网络连接中读取数据 常用Reader类型及其应用场景strings.…

vue之 package.json和package-lock.json

一、package.json 定义了当前项目所需要引用的各个模块&#xff0c;可以手工修改配置&#xff0c;也可以删除后&#xff0c;使用npm init命令重新自动生成。 但是该文件只锁定大版本号&#xff0c;也就是版本号的第一位&#xff0c;所以你会发现两个文件中同一个包的版本号不一…

【Pycharm】Pycharm创建Django提示pip版本需要升级

目录 1、现象 2、分析 3、本质 前言&#xff1a;经常使用pycharm创建django、flask等项目时候提示pip版本需要升级&#xff0c;解决方案 1、现象 使用Pycharm创建Django项目提示安装Django超时&#xff0c;报错建议pip升级22升级到24 2、分析 之前使用命令升级了pip到了24…

数据库连接池与Druid【后端 16】

数据库连接池与Druid 在现代软件开发中&#xff0c;数据库连接池作为一种关键的技术手段&#xff0c;被广泛用于提升数据库访问的效率和稳定性。本文将深入探讨数据库连接池的概念、常见实现&#xff0c;并重点介绍我国阿里集团开源的数据库连接池——Druid&#xff0c;以及如何…

五星级可视化页面(24):管线管路流程图可视化大屏。

本期分享管线、管路方向可视化大屏&#xff0c;一般用在供水、能源、交通等领域。

本地部署轻量级web开发框架Flask结合内网穿透公网环境访问管理界面

文章目录 1. 安装部署Flask2. 安装Cpolar内网穿透3. 配置Flask的web界面公网访问地址4. 公网远程访问Flask的web界面 本篇文章主要讲解如何在本地安装Flask&#xff0c;以及如何将其web界面发布到公网进行远程访问。 Flask是目前十分流行的web框架&#xff0c;采用Python编程语…

[产品管理-16]:NPDP新产品开发 - 14 - 产品创新流程 - 产品创新流程模型比较:门径、IPD、精益生产、敏捷、系统工程、设计思维、精益创业

目录 一、精益开发与敏捷开发的比较 1、核心理念 2、实践方式 3、应用场景 4、总结 二、门径流程 VS 敏捷方法 1、定义与特点 门径管理流程 敏捷方法 2、应用场景 3、比较 4、总结 三、集成产品开发 VS 系统工程 VS 设计思维 1、集成产品开发&#xff08;IPD&…

LineageOS源码下载和编译(Xiaomi Mi 6X,wayne)

版权归作者所有&#xff0c;如有转发&#xff0c;请注明文章出处&#xff1a;https://cyrus-studio.github.io/blog/ 源码下载 LineageOS官网&#xff1a;https://lineageos.org/ LineageOS源码 github 地址&#xff1a;https://github.com/LineageOS/android LineageOS源码…

在 Java 中实现 Kafka Producer 的单例模式

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐&#xff1a;「storm…

解决 Kylin OS 提示软件包 powerconnect 需要重新安装,但是我无法找到相应的安装文件

解决 Kylin OS 提示软件包 powerconnect 需要重新安装&#xff0c;但是我无法找到相应的安装文件 1、问题现象2、解决办法 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 1、问题现象 sudo apt-get install -y seahorse生物识别认证 按Q或…