PAT Advanced 1155 Heap Paths (30分)

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), 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

题目大意:给定一个堆数组,判定是大顶堆,小顶堆,还是不是堆。并且还需要打印自上而下,自左向右的顺序

解决方案:使用一个vector进行存储,进行DFS进行遍历,当为叶子节点的时候,记录路径(不能立即打印,否则是反的),用stack进行记录路径顺序,最后打印。

解决判定顶堆,采用一个int值进行记录,如果是1则是大顶堆,0不是顶堆,-1小顶堆。紧接着,我们每次DFS进行判定最后两个数据,如果是符合顶堆的路径,则不需要管。否则需要进行赋值heapJudge为0

#include <iostream>
#include <vector>
#include <stack>
using namespace std;
vector<int> v;
vector<int> path;
stack<string> res;
/** 判定是否为堆 */
int heapJudge;// -1 minHeap 0 notHeap 1 maxHeap
void DFS(int index){
    /** 每次DFS的时候,最后两个path数据进行比较,如果不符合顶堆条件,则进行置0 */
    if(path.size()>1){
        if(heapJudge==1&&path[path.size()-1]>path[path.size()-2]) heapJudge=0;
        if(heapJudge==-1&&path[path.size()-1]<path[path.size()-2]) heapJudge=0;
    }
    /** 如果大于数据的长度,则进行push到栈里面,稍后打印 */
    if(index>=v.size()){
        string str="";
        for(int i=0;i<path.size();i++){
            if(i!=0) str+=" ";
            str+=to_string(path[i]);
        }
        str+="\n";
        res.push(str);
        return ;
    }
    /** push进一个数据 */
    path.push_back(v[index]);
    /** 进行DFS */
    DFS(index*2);
    /** 如果有右子树,还要进行打印遍历,否则不需要,因为如果是叶子,会打印2次*/
    if(index*2+1<v.size())DFS(index*2+1);
    path.pop_back();
}
int main(){
    // 进行先序打印
    int N;cin>>N;
    v.resize(N+1);
    for(int i=1;i<=N;i++) cin>>v[i];
    /** 判断第一个数据和第二个数据,如果大则是大顶堆,否则是小顶堆 */
    v[1]>v[2] ? heapJudge=1:heapJudge=-1;
    DFS(1);
    while(!res.empty()){
        cout<<res.top();
        res.pop();
    }
    if(heapJudge==1) printf("Max Heap");
    else if(heapJudge==0) printf("Not Heap");
    else printf("Min Heap");
    system("pause");
    return 0;
}

原文地址:https://www.cnblogs.com/littlepage/p/12207175.html

时间: 2024-11-08 06:26:21

PAT Advanced 1155 Heap Paths (30分)的相关文章

PAT Advanced 1155 Heap Paths (30 分)

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 h

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 eithe

PAT Advanced 1022 Digital Library (30分)

A Digital Library contains millions of books, stored according to their titles, authors, key words of their abstracts, publishers, and published years. Each book is assigned an unique 7-digit number as its ID. Given any query from a reader, you are s

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

1049 Counting Ones (30 分) The task is simple: given any positive integer N, you are supposed to count the total number of 1's in the decimal form of the integers from 1 to N. For example, given N being 12, there are five 1's in 1, 10, 11, and 12. Inp

PAT Advanced 1020 Tree Traversals (25分)

1020 Tree Traversals (25分) Suppose that all the keys in a binary tree are distinct positive integers. Given the postorder and inorder traversal sequences, you are supposed to output the level order traversal sequence of the corresponding binary tree.

PAT Advanced 1132 Cut Integer (20分)

Cutting an integer means to cut a K digits lone integer Z into two integers of (K/2) digits long integers A and B. For example, after cutting Z = 167334, we have A = 167 and B = 334. It is interesting to see that Z can be devided by the product of A

PAT (Advanced Level) 1057. Stack (30)

树状数组+二分. #include<iostream> #include<cstring> #include<cmath> #include<algorithm> #include<cstdio> #include<map> #include<queue> #include<string> #include<stack> #include<vector> using namespace

PAT Advanced 1041 Be Unique (20 分)

Being unique is so important to people on Mars that even their lottery is designed in a unique way. The rule of winning is simple: one bets on a number chosen from [1]. The first one who bets on a unique number wins. For example, if there are 7 peopl

PAT Advanced 1050 String Subtraction (20 分)

Given two strings S?1?? and S?2??, S=S?1??−S?2?? is defined to be the remaining string after taking all the characters in S?2?? from S?1??. Your task is simply to calculate S?1??−S?2?? for any given strings. However, it might not be that simple to do