笛卡尔树 ← AcWing 4279

embedded/2024/11/9 5:02:03/

【题目来源】
https://www.acwing.com/problem/content/4282/

【题目描述】
笛卡尔树是由一系列不同数字构成的二叉树。

笛卡尔树满足堆的性质,笛卡尔树的中序遍历序列为构建其的原始序列。
最小堆笛卡尔树表示满足小根堆性质的笛卡尔树
例如,给定序列 {8,15,3,4,1,5,12,10,18,6},则生成的最小堆笛卡尔树如图所示。

现在,给定一个长度为 N 的原始序列,请你生成最小堆笛卡尔树,并输出其层序遍历序列。

【输入格式】
第一行包含整数 N。
第二行包含 N 个两两不同的整数,表示原始序列。

【输出格式】
共一行,输出最小堆笛卡尔树的层序遍历序列。

【数据范围】
1≤N≤30,
原始序列中元素的取值范围 [−2147483648,2147483647]。

【输入样例】
10
8 15 3 4 1 5 12 10 18 6

【输出样例】
1 3 5 8 4 6 15 10 12 18

【算法分析】
● 深度优先搜索(dfs)的本质是递归。
● 深度优先搜索(dfs)函数通过添加一个 rank 形参,可以实现层序遍历。
● 声明一个 vector 数组,将每层的结点分别存到不同的 vector 里。 

【算法代码】

#include <bits/stdc++.h>
using namespace std;const int maxn=35;vector<int> v[maxn];
int a[maxn];void dfs(int le,int ri,int rank) {if(le>=ri) return;int mid=le;for(int i=le; i<ri; i++) {if(a[i]<a[mid]) mid=i;}v[rank].push_back(a[mid]);dfs(le,mid,rank+1);dfs(mid+1,ri,rank+1);
}int main() {int n;cin>>n;for(int i=0; i<n; i++) cin>>a[i];dfs(0,n,1);for(auto x:v) {for(int i=0; i<x.size(); i++) {cout<<x[i]<<" ";}}return 0;
}/*
in:
10
8 15 3 4 1 5 12 10 18 6out:
1 3 5 8 4 6 15 10 12 18
*/




【参考文献】
https://www.acwing.com/solution/content/121940/
https://www.acwing.com/solution/content/121219/
https://blog.csdn.net/weixin_73897131/article/details/128652831



 


http://www.ppmy.cn/embedded/23847.html

相关文章

【Oracle】常用命令汇总

本文基于黑马程序员文档做的二次总结&#xff0c;如有侵权&#xff0c;请联系本人删除。 字段定义 创建表空间 create tablespace waterboss datafile c:\waterboss.dbf size 100m autoextend on next 10m;waterboss 为表空间名称 datafile 用于设置物理文件名称 size 用于设…

Mysql如何查询不需要Group by的字段

问题背景 在实际业务场景中&#xff0c;我们有时会对某些字段进行分组统计&#xff0c;并且需要查出多余字段展示。比方说根据机构id统计每个机构下有多少部门&#xff0c;字段展示机构名称、部门数量、机构id。 这时会提示查询的字段必须得在group by子句中&#xff0c;否则无…

day17-day20_项目实战项目部署

万信金融 项目部署 目标&#xff1a; 理解DevOps概念 能够使用Docker Compose部署项目 理解持续集成的作用 会使用Jenkins进行持续集成 1 DevOps介绍 1.1 什么是DevOps DevOps是Development和Operations两个词的缩写&#xff0c;引用百度百科的定义&#xff1a; DevOps…

Centos编译安装python3.9

Centos编译安装python3.9 2024年4月24日, 当前Linux环境只能下载tar.gz包, 然后编译安装, 不能直接使用yum快速安装 准备相关依赖 yum -y install epel-release yum -y update 安装开发者工具 yum groupinstall "Development Tools" -y yum install openssl-de…

【论文速读】|大语言模型(LLM)智能体可以自主利用1-day漏洞

本次分享论文&#xff1a; LLM Agents can Autonomously Exploit One-day Vulnerabilities 基本信息 原文作者&#xff1a;Richard Fang, Rohan Bindu, Akul Gupta, Daniel Kang 作者单位&#xff1a;无详细信息提供 关键词&#xff1a;大语言模型, 网络安全, 1-day漏洞, …

全志ARM-蜂鸣器

sh操作准备&#xff1a; 1.使Tab键的缩进和批量对齐为4格 在/etc/vim/vimrc 中添加一项配置 set tabstop 4; 也可以再加一行 set nu显示代码的行数 vim的设置&#xff0c;修改/etc/vim/vimrc文件&#xff0c;需要用超级用户权限 /etc/vim/vimrc set shiftwidth4 设置批量…

Vuforia AR篇(四)— AR虚拟按钮

目录 前言一、创建虚拟按钮二、创建脚本三、效果 前言 在当今互联网和移动设备普及的背景下&#xff0c;**增强现实&#xff08;AR&#xff09;**技术正迅速成为连接现实世界与数字信息的重要桥梁。AR虚拟按钮作为这一技术的创新应用&#xff0c;不仅提供了一种全新的用户交互…

Pointnet和Pointnet++提取点云特征的思想

文章目录 PointNet提取特征的思想PointNet的改进 PointNet提取特征的思想 首先需要知道的是点云数据主要携带的信息&#xff0c;它所携带的信息通常是它在3D空间中的坐标和对应的点所携带的法向量。这种信息有别于图像所携带的信息。可以做这样的假设&#xff0c;如果将图像某…