1167 Cartesian Tree
题目链接
本来以为这道题需要先构建堆,于是专门先复习了堆,后来发现这道题不必也没法构建堆,因为堆必须是完全二叉树qwq。
思路也很简单,可以根据小顶堆的特点找到中序遍历数组中的根,进而对左右子树分别递归处理,访问根节点时将值放到对应层的结果中,最后遍历输出每一层的结果即可。
当然也可以采用二叉链表来重构二叉树,类似给俩遍历序列重构二叉树的算法,只不过这里时利用小顶堆的特点去划分中序遍历的序列。
#include<bits/stdc++.h>
using namespace std;
vector<vector<int> > leveltr(31);//最多30层
void dfs(vector<int> &tree,int left,int right,int depth){if(left>right){return ;}int mpos=left;for(int i=left;i<=right;i++){//寻找这一段的最小值if(tree[i]<tree[mpos]){mpos=i;}}leveltr[depth].push_back(tree[mpos]);//这段代码放在这里相当于在先序遍历dfs(tree,left,mpos-1,depth+1);dfs(tree,mpos+1,right,depth+1);//上面那段代码放在这里相当于在后续遍历}
int main(){//不需要构造出树进行层次遍历,直接结合中序遍历左根右和小顶堆的特点递归,将对应层的结果存储,最后输出int N;cin >> N;vector<int> tree;for(int i=0;i<N;i++){int tmp;cin >> tmp;tree.push_back(tmp);//这就是中序遍历的树罢了}dfs(tree,0,N-1,1);int cnt=0;for(int i=1;i<=30;i++){for(int e:leveltr[i]){cnt++;cout << e ;if(cnt!=N){cout << " ";}}}return 0;
}
1167 Cartesian Tree相关推荐
- PTA 1164-1167 Good in C/Block Reversing/Summit/Cartesian Tree
1164 Good in C 描述 When your interviewer asks you to write "Hello World" using C, can you d ...
- POJ - 2201 Cartesian Tree(笛卡尔树-单调栈/暴跳父亲)
题目链接:点击查看 题目大意:给出n个节点的key和val,构造出其笛卡尔树的原型 笛卡尔树的定义: 所谓笛卡尔树,就是将给定的n个二元组(key,val)建成一棵树.使得: 如果只关注key,那么这 ...
- PAT(甲级)2019年冬季考试 7-4 Cartesian Tree
这道题利用的是最小堆和中序排序的属性:只要知道根节点,就能得出哪些属于左子树,哪些属于右子树. 开始我一直报段错误,经过筛查,发现是创建树的函数忘记写返回语句 return root. AC代码 #i ...
- 笛卡尔树(Cartesian Tree)
一.简介 笛卡尔树是一种特定的二叉树数据结构,由数组存储.在范围最值.范围top k查询方面广泛应用. 笛卡尔树的性质: 树中的元素满足二叉搜索树性质,要求按照中序遍历得到的序列为原数组序列 树中节点 ...
- 2020年9月PAT甲级满分必备刷题技巧
2020年7月的考试结束了,除了本次的考题更新,短期内不会更新. [7月题目的特点:首次线上考试,没出链表.树相关的模板题,第2到4题背景新颖,大大降低了抄袭历年代码的可能性,可以看作是线上考试的新趋 ...
- BST、AVL、BTree、B+Tree、B*Tree、23Tree、234Tree、TTree、RBTree、LLRBTree、AATree、SplayTree、Treap、无旋Treap、scap
喜欢这篇文章吗?喜欢的话去看博主的置顶博客,即可依据分类找到此文章的原版得到更好的体验, 图片及代码显示的问题,笔者深感抱歉,想要更好的体验去原博文即可. title: tree mathjax: t ...
- POJ的题目分类(两个版本)
版本一: 简单题 1000A+B Problem 1001Exponentiation 1003 Hangover 1004 Financial Management 1005 I Think I N ...
- POJ前面的题目算法思路【转】
1000 A+B Problem 送分题 49% 2005-5-7 1001 Exponentiation 高精度 85% 2005-5-7 1002 487-3279 n/a 90% 2005-5- ...
- POJ 超详细分类
POJ 各题算法 1000 A+B Problem 送分题 49% 2005-5-7 1001 Exponentiation 高精度 ...
- 算法编程Algos Programming
算法编程Algos Programming 不同算法的集合,用于编程比赛,如ACM ICPC. 算法按主题划分.大多数算法都可以从文件中按原样运行.每种算法都有一个参考问题,并对其时间和空间复杂度作了 ...
最新文章
- R语言绘图设备dev
- Swift 数字字符串格式化
- php 类加载其它类,php 类自动载入的方法
- python定义一个整数变量_python循环定义多个变量的实例分析
- Python学习笔记(四十)— 内置模块(9)HTMLParser
- 使用FileSystem类进行文件读写及查看文件信息
- [转载] Python的exec
- JSON怎么转成Excel
- halcon21.11安装教程详解
- 智慧城市顶层设计策略方案(ppt)
- 中药配方颗粒调剂设备解决方案!基于一体化步进电机,全闭环,集成原点回归算法,丰富的报警功能
- 前端页面开发浅谈:PC 端设计如何“完美”迁移到移动端?
- 图像分类之:经典机器学习 Battle 深度学习
- 递推法 c语言,递推法
- DSSD(Deconvolutional Single Shot Detector)
- 【围观】CISP-PTE 考题示例
- 单片机助手,STM32、杰发科技、定时器计算工具助手,CAN比特率计算助手
- 2012年5月后QQ空间农场Farmkey最新计算字符串
- VMware之RAID配置
- 使用 robotstudio 创建自己的工具
热门文章
- OpenCV教程(5)函数整理
- pimple学习(1)pimple的使用
- 如何将linux编译过程中的警告及错误信息输出到文件中
- linphone源码下载及下载失败解决方法
- 大白菜u盘启动盘清除系统登录密码详细教程
- 【论文阅读】Multi-Modal Sarcasm Detection Based on Contrastive Attention Mechanism
- 反讽检测(Sarcasm Detection)
- vue-cli 3 和 vue-cli 2的区别[转]
- [转帖]地理上的济南,是个怎样的城市?
- uni-app使用多彩色图标,阿里图库