1167 Cartesian Tree(37行代码+详细注释)

news2024/11/29 2:47:38

分数 30

全屏浏览题目

切换布局

作者 陈越

单位 浙江大学

Cartesian tree is a binary tree constructed from a sequence of distinct numbers. The tree is heap-ordered, and an inorder traversal returns the original sequence. For example, given the sequence { 8, 15, 3, 4, 1, 5, 12, 10, 18, 6 }, the min-heap Cartesian tree is shown by the figure.

Your job is to output the level-order traversal sequence of the min-heap Cartesian tree.

Input Specification:

Each input file contains one test case. Each case starts from giving a positive integer N (≤30), and then N distinct numbers in the next line, separated by a space. All the numbers are in the range of int.

Output Specification:

For each test case, print in a line the level-order traversal sequence of the min-heap Cartesian tree. All the numbers in a line must be separated by exactly one space, and there must be no extra space at the beginning or the end of the line.

Sample Input:

10
8 15 3 4 1 5 12 10 18 6

Sample Output:

1 3 5 8 4 6 15 10 12 18

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

#include<bits/stdc++.h>
using namespace std;
int n,in[40];
map<int,int>l,r,pos;
int findmin(int il,int ir){//找到在il和ir之间最小的元素 
    int min=0x3f3f3f3f;
    for(int i=il;i<=ir;i++){
        if(min>in[i])min=in[i];
    }
    return min;
}
int build(int il,int ir){
    int root=findmin(il,ir);//找到根结点 
    int k=pos[root];//根结点在中序遍历的下标 
    if(il<k)l[root]=build(il,k-1);//若有左子树,递归 
    if(ir>k)r[root]=build(k+1,ir);//若有右子树,递归 
    return root;//返回根结点 
}
int main(){
    cin>>n;
    for(int i=0;i<n;i++){//输入中序遍历并记录各元素的位置 
        cin>>in[i];
        pos[in[i]]=i;
    }
    int root=build(0,n-1);//建树 
    queue<int>q;
    q.push(root);//插入根结点 
    while(q.size()){//层序遍历 
        int t=q.front();
        q.pop();
        if(l.count(t))q.push(l[t]);
        if(r.count(t))q.push(r[t]);
        cout<<t;
        if(q.size())cout<<' ';
    }
    return 0;

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

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

相关文章

火山引擎DataLeap的Catalog系统搜索实践 (二):整体架构

整体架构 火山引擎DataLeap的Catalog搜索系统使用了开源的搜索引擎Elasticsearch进行基础的文档检索&#xff08;Recall阶段&#xff09;&#xff0c;因此各种资产元数据会被存放到Elasticsearch中。整个系统包括4个主要的数据流程&#xff1a; 实时导入。资产元数据变更时相应…

华为路由器 IPSec VPN 配置

需求&#xff1a; 通过 IPSecVPN 实现上海与成都内网互通 拓扑图如下&#xff1a; 一、首先完成网络配置 1、R1 路由器设置 <Huawei>sys [Huawei]sys R1 [R1]un in en# 开启DHCP [R1]dhcp enable# 设置内网接口 [R1]int g0/0/0 [R1-GigabitEthernet0/0/0]ip addr 10.…

基于Springboot+Vue的校园招聘系统(进阶版)

本项目是一年前写的一个项目的升级版&#xff0c;因为某些原因将它作了一个升级改进&#xff0c; 好多兄弟来问有没有演示&#xff0c;现在先来写个说明&#xff01;&#xff01;&#xff01; 目录 一. &#x1f981; 前言二. &#x1f981; 开源代码与组件使用情况说明三. &am…

工作笔记-volta,package打包,

第一个 &#xff1a;前端项目启动错误 今天写前端工程的时候&#xff0c;运行了npm run dev&#xff0c;结果出现以下问题&#xff0c; 先认为是node版本原因&#xff0c;我的是14&#xff0c;同事说要切换到12&#xff0c;于是切到了12&#xff0c; 用到了volta , 安装和使用…

大咖云集共话AIGC,亚马逊云科技中国峰会亮点抢先看

充满想象的AIGC时代&#xff0c;企业如何抓住机遇实现双效提升&#xff1f;要说2023年科技圈顶流话题&#xff0c;非AIGC&#xff08;AI-generated Content&#xff0c;人工智能生成内容&#xff09;莫属。当前&#xff0c;以GPT模型为代表的AIGC正在持续渗透各行各业&#xff…

信道的数学模型

本专栏包含信息论与编码的核心知识&#xff0c;按知识点组织&#xff0c;可作为教学或学习的参考。markdown版本已归档至【Github仓库&#xff1a;https://github.com/timerring/information-theory 】或者公众号【AIShareLab】回复 信息论 获取。 文章目录 信道的数学模型广义…

OpenMMLab-AI实战营第二期-课程笔记-Class 1:开营仪式OpenMMLab概述

Class 1&#xff1a;开营仪式&OpenMMLab概述 文章目录 Class 1&#xff1a;开营仪式&OpenMMLab概述开营仪式OpenMMLab 简介why&#xff1f;when&#xff1f;what&#xff1f;for who&#xff1f;OpenMMLab 总体框架 二十分钟入门计算机视觉开源神器OpenMMLabOpenMMLab概…

SQL审核工具Yearning搭建及使用

一、背景 实际的业务场景中&#xff0c;我们难免会直接对生产库的数据进行修改。很多朋友都是发sql给运维&#xff0c;然后运维执行。过程不可控&#xff0c;出错几率很大。 而且没有审核&#xff0c;不知道提交的具体是什么sql&#xff0c;极有可能是删库跑路的sql&#xff0…

0基础学习VR全景平台篇第34篇:场景功能-沙盘功能

本期为大家带来蛙色VR平台&#xff0c;场景功能—沙盘功能的操作讲解。 功能位置示意 一、本功能将用在哪里&#xff1f; 沙盘功能&#xff0c;可将区域的平面图、卫星图、手绘图等上传或直接使用高德地图信息&#xff0c;嵌入在VR全景作品中呈现出来&#xff1b; 支持嵌入沙…

【OpenCV】OpenCV4.7.0 + Visual Studio 2019环境配置 + 运行opencv

本文目录 01、OpenCV的下载与安装02、Visual Studio 2019环境配置03、OpenCV接口测试 01、OpenCV的下载与安装 这里贴上网址&#xff1a; https://opencv.org/ 进入会看到主界面&#xff0c;跟着一步一步来下载就好&#xff1a; 当把上面这个下载下来之后&#xff0c;会得到一…

git merge和git rebase有什么区别?

git merge和git rebase有什么区别 git rebase和git merge是在日常开发中常用的用于分支合并的命令&#xff0c;也是非常容易误用的两个命令。本文将通过图文的方式去详解二者之间的区别。 git merge git merge会为本次的合并过程生成一条新的commit&#xff0c;并将该commit…

亚马逊云科技中国峰会带你玩转AIGC全攻略原

充满想象的AIGC时代&#xff0c;企业如何抓住机遇实现双效提升&#xff1f;要说2023年科技圈顶流话题&#xff0c;非AIGC&#xff08;AI-generated Content&#xff0c;人工智能生成内容&#xff09;莫属。当前&#xff0c;以GPT模型为代表的AIGC正在持续渗透各行各业&#xff…

LLVM for TVM

田海立CSDN 2023-06-01 本文简明列举LLVM作为target&#xff0c;如何集成到TVM里的。 {cmake/modules/LLVM.cmake} 0. 设置编译选项 -- USE_LLVM build option: - USE_LLVM: ON/OFF/<path to llvm-config> {set in cmake/config.cmake, and copy into build/} 1. 执行…

Linux系统上安装VScode且配置C/C++环境

Linux系统给人的印象一直是命令行的形式&#xff0c;今天终于长了见识&#xff0c;其实Linux系统也可以像Windows系统一样&#xff0c;安装、使用VScode软件 1 进入VScode官网下载VScode Linux安装版2 将下载到电脑上压缩包通过tcp指令传到Linux系统上3 在放置安装包的目录下通…

java实现文档部分预览与全预览功能

这里使用的是kkFileView插件&#xff0c;部署在服务器上&#xff0c;使用其生成预览内容&#xff0c;官网地址是&#xff1a;kkFileView - 在线文件预览 下载地址为&#xff1a;kkFileView 4.1.0 版本发布&#xff0c;开源在线文件预览解决方案 - OSCHINA - 中文开源技术交流社…

ANR日志分析全面解析

一、概述 解决ANR一直是Android 开发者需要掌握的重要技巧&#xff0c;一般从三个方面着手。 开发阶段&#xff1a;通过工具检查各个方法的耗时&#xff0c;卡顿情况&#xff0c;发现一处修改一处。 线上阶段&#xff1a;这个阶段主要依靠监控工具发现ANR并上报&#xff0c;比…

linux(system V标准)进程间通信2

目录&#xff1a; 1.回顾上一节的代码 2.shmat、shmdt的使用 3.共享内存的大小为什么最好设置成4096字节的整数倍呢&#xff1f; 4.操作系统如何管理共享内存的 ----------------------------------------------------------------------------------------------------------…

SpringMVC04:数据处理及跳转

目录 一、跳转方式ModelAndView 二、ServletAPI 三、SpringMVC 四、数据处理&#xff1a;处理提交数据 1、提交的域名称和处理方法的参数名一致 2、提交的域名称和处理方法的参数名不一致 3、提交的是一个对象 五、数据显示到前端 1、通过ModelAndView 2、通过ModelM…

Nginx的使用和有关配置

&#x1f331;Nginx的基础使用和有关配置。 &#x1f4eb;相关软件:链接地址 文章目录 Nginx目录结构Nginx基本运行原理Nginx的基本配置文件 Nginx目录结构 [rootlocalhost ~]# tree /usr/local/nginx /usr/local/nginx ├── client_body_temp # POST 大文件…

dstat 好用的可视化工具

大家好&#xff0c;我是早九晚十二&#xff0c;目前是做运维相关的工作。写博客是为了积累&#xff0c;希望大家一起进步&#xff01; 我的主页&#xff1a;早九晚十二 dstat 好用的终端工具 安装方法命令详解负载与CPU相关展示第一颗与第四颗cpu使用情况展示每秒的CPU时钟频率…