PAT甲级-1020 Tree Traversals

news2025/1/28 1:14:59

题目

题目大意

给出一棵树的后序遍历和中序遍历,要求输出该树的层序遍历。

思路

非常典型的树的构建与遍历问题。后序遍历和中序遍历可以得出一个树的结构,用递归锁定根节点,然后再遍历左右子树,我之前发过类似题目的博客,这里就不再详细赘述。层序遍历就是使用队列了。

代码

#include <iostream>
#include <vector>
#include <queue>
using namespace std;

int n;
vector<int> hou, mid, level;
struct node{
    int data;
    node * lchild, *rchild;
};

void buildtree(node * &root, int hl, int hr, int ml, int mr){
    if (hl > hr || ml > mr){
        return;
    }
    int pos;
    for (int i = ml; i <= mr; i++){
        if (hou[hr] == mid[i]){
            pos = i;
            break;
        }
    }
    root = new node();
    root->data = hou[hr];
    root->lchild = root->rchild = nullptr;
    buildtree(root->lchild, hl, hl + pos - ml - 1, ml, pos - 1);
    buildtree(root->rchild, hl + pos - ml, hr - 1, pos + 1, mr);
}

void findlevel(node * root){
    queue<node *> q;
    q.push(root);
    while (!q.empty()){
        node * now = q.front();
        level.push_back(now->data);
        q.pop();
        if (now->lchild) q.push(now->lchild);
        if (now->rchild) q.push(now->rchild);
    }
}

int main(){
    cin >> n;
    hou.resize(n);
    mid.resize(n);
    for (int i = 0; i < n; i++){
        cin >> hou[i];
    }
    for (int i = 0; i < n; i++){
        cin >> mid[i];
    }
    node * root = nullptr;
    buildtree(root, 0, n - 1, 0, n - 1);
    findlevel(root);
    for (int i = 0; i < (int)level.size(); i++){
        if (i != 0) cout << " ";
        cout << level[i];
    }
    cout << endl;

    return 0;
}

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

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

相关文章

GIS 中的 SQLAlchemy:空间数据与数据库之间的桥梁

利用 SQLAlchemy 在现代应用程序中无缝集成地理空间数据导言 地理信息系统&#xff08;GIS&#xff09;在管理城市规划、环境监测和导航系统等各种应用的空间数据方面发挥着至关重要的作用。虽然 PostGIS 或 SpatiaLite 等专业地理空间数据库在处理空间数据方面非常出色&#…

【AppleID】注册M区AppleID 2025年

注册&#xff08;一台电脑一天只能注册一个&#xff09; https://account.apple.com/ 需任意邮箱&#xff0c;任意手机 手机上登录后填地址 示例

frida的常用api

1、Hook普通方法、打印参数和修改返回值 Hook函数 Hook代码 function hookTest1(){var utils Java.use("com.zj.wuaipojie.Demo");utils.a.implementation function(str){// a "test";var retval this.a(str);console.log(str , retval);return retva…

基于C语言的数组从入门到精通

简介:本篇文章主要介绍了一维数组,二维数组,字符数组的定义,数组的应用,数组的核心代码解析,适用于0基础的初学者. C语言数组 1.一维数组 1.1定义 1.1.1声明 语法:数据类型 数组名[数组大小];示例:int arr[5]; 1.1.2初始化 a.静态初始化 完全初始化&#xff1a;int arr[5] {1…

【Elasticsearch】inference ingest pipeline

Elasticsearch 的 Ingest Pipeline 功能允许你在数据索引之前对其进行预处理。通过使用 Ingest Pipeline&#xff0c;你可以执行各种数据转换和富化操作&#xff0c;包括使用机器学习模型进行推理&#xff08;inference&#xff09;。这在处理词嵌入、情感分析、图像识别等场景…

【线性代数】基础版本的高斯消元法

[精确算法] 高斯消元法求线性方程组 线性方程组 考虑线性方程组&#xff0c; 已知 A ∈ R n , n , b ∈ R n A\in \mathbb{R}^{n,n},b\in \mathbb{R}^n A∈Rn,n,b∈Rn&#xff0c; 求未知 x ∈ R n x\in \mathbb{R}^n x∈Rn A 1 , 1 x 1 A 1 , 2 x 2 ⋯ A 1 , n x n b 1…

漏洞修复:Apache Tomcat 安全漏洞(CVE-2024-50379) | Apache Tomcat 安全漏洞(CVE-2024-52318)

文章目录 引言I Apache Tomcat 安全漏洞(CVE-2024-50379)漏洞描述修复建议升级Tomcat教程II Apache Tomcat 安全漏洞(CVE-2024-52318)漏洞描述修复建议III 安全警告引言 解决方案:升级到最新版Tomcat https://blog.csdn.net/z929118967/article/details/142934649 service in…

算法每日双题精讲 —— 二分查找(山脉数组的峰顶索引,寻找峰值)

&#x1f31f;快来参与讨论&#x1f4ac;&#xff0c;点赞&#x1f44d;、收藏⭐、分享&#x1f4e4;&#xff0c;共创活力社区。 &#x1f31f; 别再犹豫了&#xff01;快来订阅我们的算法每日双题精讲专栏&#xff0c;一起踏上算法学习的精彩之旅吧&#x1f4aa; 在算法的…

mapbox加载geojson,鼠标移入改变颜色,设置样式以及vue中的使用

全国地图json数据下载地址 目录 html加载全部代码 方式一&#xff1a;使用html方式加载geojson 1. 初始化地图 2. 加载geojson数据 设置geojson图层样式&#xff0c;设置type加载数据类型 设置线条 鼠标移入改变颜色&#xff0c;设置图层属性&#xff0c;此处是fill-extru…

衡量算法性能的量级标准:算法复杂度

今天开始数据结构的学习&#xff01;作为一大重点&#xff0c;拿出态度很重要&#xff0c;想要真实掌握&#xff0c;博客笔记自然少不了&#xff01;重点全部上色&#xff01;避免疏忽 下面我们从0基础开始学习今天的第一节&#xff01;不用担心看不懂&#xff0c;拒绝枯燥的理…

IDE提示:因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID=135170

问题情况 不知道为什么我的IDE终端运行命令的时候总提示以下内容&#xff1a; Import-Module : 无法加载文件 D:\Anaconda3\shell\condabin\Conda.psm1&#xff0c;因为在此系统上禁止运行脚本。有关详细信息&#xff0c;请参阅 https:/go.microsoft.com/fwlink/?LinkID1351…

DRF开发避坑指南01

在当今快速发展的Web开发领域&#xff0c;Django REST Framework&#xff08;DRF&#xff09;以其强大的功能和灵活性成为了众多开发者的首选。然而&#xff0c;错误的使用方法不仅会导致项目进度延误&#xff0c;还可能影响性能和安全性。本文将从我个人本身遇到的相关坑来给大…

GD32的GD库开发

所有的Cortex-M处理器都有相同的SysTick定时器&#xff0c;因为CMSIS-Core头文件中定义了一个名为SysTick的结构体。 这个定时器可以用作延时函数&#xff0c;不管是STM32的芯片还是GD32&#xff0c;AT32的芯片&#xff0c;delay函数都可以这么写&#xff0c;只要它是cortex-M…

LabVIEW项目中的工控机与普通电脑选择

工控机&#xff08;Industrial PC&#xff09;与普通电脑在硬件设计、性能要求、稳定性、环境适应性等方面存在显著差异。了解这些区别对于在LabVIEW项目中选择合适的硬件至关重要。下面将详细分析这两种设备的主要差异&#xff0c;并为LabVIEW项目中的选择提供指导。 ​ 硬件设…

python如何导出数据到excel文件

python导出数据到excel文件的方法&#xff1a; 1、调用Workbook()对象中的add_sheet()方法 wb xlwt.Workbook() ws wb.add_sheet(A Test Sheet) 2、通过add_sheet()方法中的write()函数将数据写入到excel中&#xff0c;然后使用save()函数保存excel文件 ws.write(0, 0, 1234…

Yocto项目 - 解读CROss PlatformS (CROPS)

一、概述 Yocto项目是一个用于创建自定义Linux发布版本的工具集成项目&#xff0c;在应对复杂应用场景时能提供高度可自定义性。但是在多端机应用中&#xff0c;如何在不同的平台上可靠地完成构建工作&#xff1f;CROss PlatformS (CROPS)即展示了其重要作用。 CROPS是Yocto项…

【技巧】优雅的使用 pnpm+Monorepo 单体仓库构建一个高效、灵活的多项目架构

单体仓库&#xff08;Monorepo&#xff09;搭建指南&#xff1a;从零开始 单体仓库&#xff08;Monorepo&#xff09;是一种将多个相关项目集中管理在一个仓库中的开发模式。它可以帮助开发者共享代码、统一配置&#xff0c;并简化依赖管理。本文将通过实际代码示例&#xff0…

Ubuntu24.04初始化MySQL报错 error while loading shared libraries libaio.so.1

Ubuntu24.04初始化MySQL报错 error while loading shared libraries: libaio.so.1 问题一&#xff1a;libaio1不存在 # 提示libaio1不存在 [rootzabbix-mysql-master.example.com x86_64-linux-gnu]#apt install numactl libaio1 Reading package lists... Done Building depe…

数据标注开源框架 Label Studio

数据标注开源框架 Label Studio Label Studio 是一个开源的、灵活的数据标注平台&#xff0c;旨在帮助开发者和数据科学家轻松创建高质量的训练数据集。它支持多种类型的数据&#xff08;如文本、图像、音频、视频等&#xff09;以及复杂的标注任务&#xff08;如分类、命名实体…

OS Copilot功能测评:智能助手的炫彩魔法

简介&#xff1a; OS Copilot 是一款融合了人工智能技术的智能助手&#xff0c;专为Linux系统设计&#xff0c;旨在提升系统管理和运维效率。本文详细介绍了在阿里云ECS实例上安装和体验OS Copilot的过程&#xff0c;重点评测了其三个核心参数&#xff1a;-t&#xff08;模式…