题意分析:

给出一个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. 题解-Little C Loves 3 III

    Little C Loves 3 III 给定 \(n\) 和序列 \(a_0,a_1,\dots,a_{2^n-1}\) 和 \(b_0,b_1,\dots,b_{2^n-1}\),求序列 \(c_ ...

  2. 算法——移掉K位数字使得数值最小

    给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小. leetcode 解题思路:如果这个数的各个位是递增的,那么直接从最后面开始移除一定就是最最小的:如果这个数的 ...

  3. uniapp计算属性的使用

    计算属性,也可称为动态属性,在uniapp中有两种写法: 第一种:直接返回一个计算的值,该计算属性为函数类型 computed:{ kh_score(){ var list = this.taskLi ...

  4. Object not found! The requested URL was not found on this server.... 报错解决方案

    服务器(centos6.5) lnmp 报错如下 Object not found! The requested URL was not found on this server. The link ...

  5. 解决虚拟机联网问题linux VMware eth0

    虚拟机坏了n多回,真是让我装机装到吐血,经过两天的折腾终于弄明白怎么配置虚拟机的静态ip了. 方法: 1. 将虚拟机关机,--> 打开编辑 ->点击 虚拟网络映射 ->点击 VMne ...

  6. javaweb练手项目jsp+servlet简易购物车系统

    简易购物车项目 这是一个用intellij IDEA做的简易的javaweb项目,开发环境使用的jdk1.8和tomcat8以及mysql数据库. 1.项目开发准备: 创建github仓库 项目框架搭 ...

  7. 【收藏】关于元数据(Metadata)和元数据管理,这是我的见过最全的解读!

    本文主要从元数据的定义.作用.元数据管理现状.管理标准和元数据管理功能等方面讲述了我对元数据(Metadata)和元数据管理的认知及理解. 元数据管理 一.元数据的定义 按照传统的定义,元数据(Met ...

  8. PHP代码样例

    1 <?php 2 3 /** 4 * 时间:2015-8-6 5 * 作者:River 6 * 超级有用.必须收藏的PHP代码样例 7 */ 8 class Helper { 9 10 /** ...

  9. Core3.0类库项目引用Microsoft.AspNetCore

    前言 参考 https://www.cnblogs.com/puzi0315/p/12190989.html 步骤 修改Project.Sdk 添加OutputType <Project Sdk ...

  10. Core3.0使用Caching.Memory

    前言 参考链接: 使用缓存:https://www.cnblogs.com/gygg/p/11275417.html 过期时间:https://www.cnblogs.com/maijin/p/704 ...