题目链接
本来以为这道题需要先构建堆,于是专门先复习了堆,后来发现这道题不必也没法构建堆,因为堆必须是完全二叉树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相关推荐

  1. 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 ...

  2. POJ - 2201 Cartesian Tree(笛卡尔树-单调栈/暴跳父亲)

    题目链接:点击查看 题目大意:给出n个节点的key和val,构造出其笛卡尔树的原型 笛卡尔树的定义: 所谓笛卡尔树,就是将给定的n个二元组(key,val)建成一棵树.使得: 如果只关注key,那么这 ...

  3. PAT(甲级)2019年冬季考试 7-4 Cartesian Tree

    这道题利用的是最小堆和中序排序的属性:只要知道根节点,就能得出哪些属于左子树,哪些属于右子树. 开始我一直报段错误,经过筛查,发现是创建树的函数忘记写返回语句 return root. AC代码 #i ...

  4. 笛卡尔树(Cartesian Tree)

    一.简介 笛卡尔树是一种特定的二叉树数据结构,由数组存储.在范围最值.范围top k查询方面广泛应用. 笛卡尔树的性质: 树中的元素满足二叉搜索树性质,要求按照中序遍历得到的序列为原数组序列 树中节点 ...

  5. 2020年9月PAT甲级满分必备刷题技巧

    2020年7月的考试结束了,除了本次的考题更新,短期内不会更新. [7月题目的特点:首次线上考试,没出链表.树相关的模板题,第2到4题背景新颖,大大降低了抄袭历年代码的可能性,可以看作是线上考试的新趋 ...

  6. BST、AVL、BTree、B+Tree、B*Tree、23Tree、234Tree、TTree、RBTree、LLRBTree、AATree、SplayTree、Treap、无旋Treap、scap

    喜欢这篇文章吗?喜欢的话去看博主的置顶博客,即可依据分类找到此文章的原版得到更好的体验, 图片及代码显示的问题,笔者深感抱歉,想要更好的体验去原博文即可. title: tree mathjax: t ...

  7. POJ的题目分类(两个版本)

    版本一: 简单题 1000A+B Problem 1001Exponentiation 1003 Hangover 1004 Financial Management 1005 I Think I N ...

  8. POJ前面的题目算法思路【转】

    1000 A+B Problem 送分题 49% 2005-5-7 1001 Exponentiation 高精度 85% 2005-5-7 1002 487-3279 n/a 90% 2005-5- ...

  9. POJ 超详细分类

    POJ 各题算法 1000    A+B Problem            送分题     49%    2005-5-7 1001    Exponentiation         高精度   ...

  10. 算法编程Algos Programming

    算法编程Algos Programming 不同算法的集合,用于编程比赛,如ACM ICPC. 算法按主题划分.大多数算法都可以从文件中按原样运行.每种算法都有一个参考问题,并对其时间和空间复杂度作了 ...

最新文章

  1. R语言绘图设备dev
  2. Swift 数字字符串格式化
  3. php 类加载其它类,php 类自动载入的方法
  4. python定义一个整数变量_python循环定义多个变量的实例分析
  5. Python学习笔记(四十)— 内置模块(9)HTMLParser
  6. 使用FileSystem类进行文件读写及查看文件信息
  7. [转载] Python的exec
  8. JSON怎么转成Excel
  9. halcon21.11安装教程详解
  10. 智慧城市顶层设计策略方案(ppt)
  11. 中药配方颗粒调剂设备解决方案!基于一体化步进电机,全闭环,集成原点回归算法,丰富的报警功能
  12. 前端页面开发浅谈:PC 端设计如何“完美”迁移到移动端?
  13. 图像分类之:经典机器学习 Battle 深度学习
  14. 递推法 c语言,递推法
  15. DSSD(Deconvolutional Single Shot Detector)
  16. 【围观】CISP-PTE 考题示例
  17. 单片机助手,STM32、杰发科技、定时器计算工具助手,CAN比特率计算助手
  18. 2012年5月后QQ空间农场Farmkey最新计算字符串
  19. VMware之RAID配置
  20. 使用 robotstudio 创建自己的工具

热门文章

  1. OpenCV教程(5)函数整理
  2. pimple学习(1)pimple的使用
  3. 如何将linux编译过程中的警告及错误信息输出到文件中
  4. linphone源码下载及下载失败解决方法
  5. 大白菜u盘启动盘清除系统登录密码详细教程
  6. 【论文阅读】Multi-Modal Sarcasm Detection Based on Contrastive Attention Mechanism
  7. 反讽检测(Sarcasm Detection)
  8. vue-cli 3 和 vue-cli 2的区别[转]
  9. [转帖]地理上的济南,是个怎样的城市?
  10. uni-app使用多彩色图标,阿里图库