PAT 甲级 1155 Heap Paths

Posted zlrrrr

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PAT 甲级 1155 Heap Paths相关的知识,希望对你有一定的参考价值。

https://pintia.cn/problem-sets/994805342720868352/problems/1071785408849047552

 

In computer science, a heap is a specialized tree-based data structure that satisfies the heap property: if P is a parent node of C, then the key (the value) of P is either greater than or equal to (in a max heap) or less than or equal to (in a min heap) the key of C. A common implementation of a heap is the binary heap, in which the tree is a complete binary tree. (Quoted from Wikipedia at https://en.wikipedia.org/wiki/Heap_(data_structure))

One thing for sure is that all the keys along any path from the root to a leaf in a max/min heap must be in non-increasing/non-decreasing order.

Your job is to check every path in a given complete binary tree, in order to tell if it is a heap or not.

Input Specification:

Each input file contains one test case. For each case, the first line gives a positive integer N (1<N1,000), the number of keys in the tree. Then the next line contains N distinct integer keys (all in the range of int), which gives the level order traversal sequence of a complete binary tree.

Output Specification:

For each given tree, first print all the paths from the root to the leaves. Each path occupies a line, with all the numbers separated by a space, and no extra space at the beginning or the end of the line. The paths must be printed in the following order: for each node in the tree, all the paths in its right subtree must be printed before those in its left subtree.

Finally print in a line Max Heap if it is a max heap, or Min Heap for a min heap, or Not Heap if it is not a heap at all.

Sample Input 1:

8
98 72 86 60 65 12 23 50

Sample Output 1:

98 86 23
98 86 12
98 72 65
98 72 60 50
Max Heap

Sample Input 2:

8
8 38 25 58 52 82 70 60

Sample Output 2:

8 25 70
8 25 82
8 38 52
8 38 58 60
Min Heap

Sample Input 3:

8
10 28 15 12 34 9 8 56

Sample Output 3:

10 15 8
10 15 9
10 28 34
10 28 12 56
Not Heap
 

代码:

#include <bits/stdc++.h>
using namespace std;

const int maxn = 1e5 + 10;
int N;
int a[maxn];
vector<int> v;

void dfs(int st) {
    if(st * 2 > N && st * 2 + 1 > N) {
        if(st <= N) {
            for(int i = 0; i < v.size(); i ++) {
                printf("%d", v[i]);
                printf("%s", i != v.size() - 1 ? " " : "
");
            }
        }
    } else {
        v.push_back(a[st * 2 + 1]);
        dfs(st * 2 + 1);
        v.pop_back();
        v.push_back(a[st * 2]);
        dfs(st * 2);
        v.pop_back();
    }
}

int main() {
    scanf("%d", &N);
    for(int i = 1; i <= N; i ++)
        scanf("%d", &a[i]);
    v.push_back(a[1]);
    dfs(1);

    int MaxHeap = 1, MinHeap = 1;
    for(int i = 2; i <= N; i ++) {
        if(a[i / 2] > a[i]) MinHeap = 0;
        if(a[i / 2] < a[i]) MaxHeap = 0;
    }

    if(MaxHeap == 1)
        printf("Max Heap
");
    else if(MinHeap == 1)
        printf("Min Heap
");
    else printf("Not Heap
");
    return 0;
}

  dfs 搜索路径 然后根据最大堆最小堆的性质判断 刚刚好上午写好了堆排序 (FH 的堆排序)

技术分享图片

FHFHFH  33 天倒计时

以上是关于PAT 甲级 1155 Heap Paths的主要内容,如果未能解决你的问题,请参考以下文章

PAT Advanced 1155 Heap Paths (30分)

PAT Advanced 1155 Heap Paths (30 分)

PAT甲级——A1155 HeapPaths30

PAT(甲级)2018年冬季考试 7-4 Heap Paths(非递归与递归解法)

1155 Heap Paths (30 分)难度: 一般 / 知识点: 堆 堆的遍历

PAT甲级--Insertion or Heap Sort