题意分析:

给出一个1000以内的整数N,以及N个整数,并且这N个数是按照完全二叉树的层序遍历输出的序列,输出所有的整条的先序遍历的序列(根 右 左),以及判断整棵树是否是符合堆排序的规则(判断是大顶堆,小顶堆,不是堆)

题解分析:

由于给出的整数序列是按照完全二叉树的层序遍历,所以不存在中间有空的节点,并且层序遍历满足1~N的节点顺序正好方便我们一边输入一边建立完全二叉树,之后就是正常的先序遍历(这题要求根 右 左),有所区别的是最后的输出每次到达最后一个叶子节点的时候都需要输出一遍整条序列,所以我们用一个vector存储遍历的路径,关于是否是大顶堆小顶堆的判断其实就是比较每次的一条路径,如果所有的路径都是递增就是小顶堆,都是递减就是大顶堆,无论是同一条路径中出现了乱序还是有两条路径的排序规则不同都将导致堆的不存在,还有就是开范围的时候多开一倍不然就会越界哟~

代码:

 1 #include<iostream>
2 #include<stdio.h>
3 #include<vector>
4 #include<string.h>
5 using namespace std;
6
7 const int N = 2005;
8 vector<int> road; //可能有相同大小的键值的节点
9 int tree[N];
10 int n, flag, appear;
11
12 void pre(int gen){
13 road.push_back(tree[gen]);
14 if(tree[gen*2] == 0 && tree[gen*2+1] == 0){
15 int up = 0; int down = 0;
16 for(int i = 0; i < road.size(); i++){
17 if(i != 0) printf(" ");
18 printf("%d", road[i]);
19 if(i > 0 && road[i] > road[i-1]) up = 1; //出现递增
20 if(i > 0 && road[i] < road[i-1]) down = 1; //出现递降
21 }
22 if(appear == 0){
23 if(up == 1 && down == 0){
24 appear = 1; flag = -1;
25 }
26 if(up == 0 && down == 1){
27 appear = 1; flag = 1;
28 }
29 if(up == 1 && down == 1){
30 appear = 1; flag = 0;
31 }
32 }else{
33 if(flag == 1 && up == 1) flag = 0;
34 if(flag == -1 && down == 1) flag = 0;
35 }
36 printf("\n");
37 road.pop_back();
38 return;
39 }
40 if(tree[gen*2+1] != 0) pre(gen*2+1);
41 if(tree[gen*2] != 0) pre(gen*2);
42 road.pop_back();
43 }
44
45 int main(){
46 scanf("%d", &n);
47 memset(tree, 0, sizeof(tree));
48 for(int i = 1; i <= n; i++) scanf("%d", &tree[i]);
49 appear = 0; //是否和flag比较过 0没有 1比较过
50 flag = 0; //1为大顶堆 -1为小顶堆 0为都不是
51 pre(1);
52 if(flag == 0) printf("Not Heap\n");
53 if(flag == 1) printf("Max Heap\n");
54 if(flag == -1) printf("Min Heap\n");
55 return 0;
56 }

PAT甲级 1155 Heap Paths (30分) 堆模拟的更多相关文章

  1. PAT Advanced 1155 Heap Paths (30 分)

    In computer science, a heap is a specialized tree-based data structure that satisfies the heap prope ...

  2. pat甲级 1155 Heap Paths (30 分)

    In computer science, a heap is a specialized tree-based data structure that satisfies the heap prope ...

  3. PAT Advanced 1155 Heap Paths (30) [DFS, 深搜回溯,堆]

    题目 In computer science, a heap is a specialized tree-based data structure that satisfies the heap pr ...

  4. PAT 甲级 1155 Heap Paths

    https://pintia.cn/problem-sets/994805342720868352/problems/1071785408849047552 In computer science, ...

  5. PAT 甲级 1080 Graduate Admission (30 分) (简单,结构体排序模拟)

    1080 Graduate Admission (30 分)   It is said that in 2011, there are about 100 graduate schools ready ...

  6. PAT 甲级 1072 Gas Station (30 分)(dijstra)

    1072 Gas Station (30 分)   A gas station has to be built at such a location that the minimum distance ...

  7. PAT 甲级 1049 Counting Ones (30 分)(找规律,较难,想到了一点但没有深入考虑嫌麻烦)***

    1049 Counting Ones (30 分)   The task is simple: given any positive integer N, you are supposed to co ...

  8. PAT 甲级 1030 Travel Plan (30 分)(dijstra,较简单,但要注意是从0到n-1)

    1030 Travel Plan (30 分)   A traveler's map gives the distances between cities along the highways, to ...

  9. PAT 甲级 1026 Table Tennis (30 分)(坑点很多,逻辑较复杂,做了1天)

    1026 Table Tennis (30 分)   A table tennis club has N tables available to the public. The tables are ...

随机推荐

  1. 如何建一个SAM

    部分改编自OI WIKI 先从一个简单的问题入手: 给定一个串,构造一个图,使其能够表示它的所有子串. 显然一个子串就是一个后缀的前缀.所以一个很显然的方式就是把所有后缀扔进trie里. 比如当前串是 ...

  2. 解压版mysql+免破解版Navicat,好用!

    解压版mysql安装流程 获取mysql压缩包 获取地址: 链接:https://pan.baidu.com/s/1HqdFDQn_6ccPM0gOftApIg 提取码:n19t 获取压缩包后可安装压 ...

  3. Vue--子组件相互传参

    引用了element做按钮组件 父组件 创建子组件公用的空vue变量,为pubVue,并传给需要互相传参/互相调用方法的两个子组件 <template> <div> <b ...

  4. Nginx安装配置教程

    转自https://www.cnblogs.com/zhouxinfei/p/7862285.html nginx概述 nginx是一款自由的.开源的.高性能的HTTP服务器和反向代理服务器:同时也是 ...

  5. springboot:异步调用@Async

    在后端开发中经常遇到一些耗时或者第三方系统调用的情况,我们知道Java程序一般的执行流程是顺序执行(不考虑多线程并发的情况),但是顺序执行的效率肯定是无法达到我们的预期的,这时就期望可以并行执行,常规 ...

  6. CPU的功能和基本组成结构

    目录 CPU的功能 运算器和控制器的功能 CPU的基本结构 运算器的基本结构 控制器的基本结构 整体 本节回顾 CPU的功能 指令控制:完成取指令.分析指令和执行指令的操作,即程序的顺序控制 操作控制 ...

  7. Envoy入门实战部署

    一.Envoy介绍 官方文档解释: Envoy是专为大型现SOA(面向服务架构)设置的L7代理和通信总线.该项目源于以下理念:网络对应用程序来说应该是透明的.当网络和应用程序出现问题时,应该很容易确定 ...

  8. db2常用操作

    1. db2建立远程节点编目及删除 db2 catalog tcpip node nodeName remote remoteIp server remotePort db2 list node di ...

  9. linux下使用vsftp搭建FTP服务器:匿名登录,账号登录,SSL加密传输

    目录 一.关于FTP和VSFTP 二.ftp.sftp.vsftp.vsftpd的区别 三.项目一:搭建一台所有人都可以访问的通用FTP服务器 3.1 项目要求 3.2 项目思路分析 3.3 使用vs ...

  10. JS中Generator的学习小记

    Generator的异步实现 整理了一下在学习和使用JS异步过程中的一些知识点.核心是在Generator实例的的回调中调度实例的下一步,同样的思想也能用于其它语言.比如Python中使用Genera ...