• 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<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



    AC代码:
    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=10010;
    #define inf 0x3fffffff
    int n;
    int heap[maxn];
    vector<int> v;
    bool maxH(){
        for(int i=1;i<=n;i++){
            if(i*2>n){
                break;
            }
            if(heap[i*2]>heap[i]){
                return false;
            }
            if(i*2+1>n){
                break;
            }
            if(heap[i*2+1]>heap[i]){
                return false;
            }
        }
        return true;
    }
    bool minH(){
        for(int i=1;i<=n;i++){
            if(i*2>n){
                break;
            }
            if(heap[i*2]<heap[i]){
                return false;
            }
            if(i*2+1>n){
                break;
            }
            if(heap[i*2+1]<heap[i]){
                return false;
            }
        }
        return true;
    }
    vector<int> path,tempath;
    void dfs(int u){
        if(u*2>n){
            v.push_back(heap[u]);
            for(auto it=v.begin();it!=v.end();it++){
                printf("%d",*it);
                if(it!=v.end()-1){
                    printf(" ");
                }
            }
            printf("\n");
            v.pop_back();
            return ;
        }
        v.push_back(heap[u]);
        if(u*2+1<=n){
            dfs(u*2+1);
        }
        if(u*2<=n){
            dfs(u*2);
        }
        v.pop_back();
    }
    int main(){
        scanf("%d",&n);
        heap[0]=0;
        for(int i=1;i<=n;i++){
            scanf("%d",&heap[i]);
        }
        dfs(1);
        if(maxH()){
            printf("Max Heap\n");
        }
        else if(minH()){
            printf("Min Heap\n");
        }
        else{
            printf("Not Heap\n");
        }
        return 0;
    }
  • 相关阅读:
    【星云测试】Wings-面向企业级的单元测试用例自动编码引擎最新发布
    【星云测试】Wings企业级单元测试自动编码引擎白皮书
    Redis基础之命令篇
    Redis安装与启动
    My Self Introduction
    这就是小学生也会用的四则计算练习APP吗?- by软工结对编程项目作业
    Java余弦计算文本相似度项目—第一次个人编程作业(软件工程)
    Android 开发学习进程0.26 fragment的工厂实例化
    Android 开发学习进程0.25 自定义控件
    Android开发学习进程 0.24 存储机制
  • 原文地址:https://www.cnblogs.com/dreamzj/p/15905940.html
Copyright © 2020-2023  润新知