1155 Heap Paths (30 分)(堆+dfs遍历)

比较简单的一题

遍历左右的时候注意一下

#include<bits/stdc++.h>

using namespace std;
const int N=1e3+10;
int s[N*2];
int cnt=0;
vector<int>t;
vector<int>p[N];
int n;
void dfs(int v)
{
    if(s[v]==-1){
        int i=v/2;
        if(s[i*2]!=-1||s[i*2+1]!=-1){
            return;
        }
        p[cnt++]=t;

        return ;
    }
    t.push_back(s[v]);
    dfs(v*2+1);
    dfs(v*2);
    t.pop_back();
}
int main()
{
    memset(s,-1,sizeof(s));
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        scanf("%d",&s[i]);
    }
    dfs(1);
    for(int i=0;i<cnt;i++){
        if(i%2==1) continue;
        for(int j=0;j<p[i].size();j++){
            if(j) printf(" ");
            printf("%d",p[i][j]);
        }
        printf("
");
    }
    bool Max=false;
    bool Min=false;
    for(int i=1;i<n;i++){
        if(s[i*2]!=-1){
            if(s[i*2]>s[i]) Max=true;
        }
        if(s[i*2+1]!=-1){
            if(s[i*2+1]>s[i]) Max=true;
        }
    }
    for(int i=1;i<n;i++){
        if(s[i*2]!=-1){
            if(s[i*2]<s[i]) Min=true;
        }
        if(s[i*2+1]!=-1){
            if(s[i*2+1]<s[i]) Min=true;
        }
    }
    if(Max==false){
        printf("Max Heap
");
    }
    else if(Min==false){
        printf("Min Heap
");
    }
    else{
        printf("Not Heap
");
    }
    return 0;
}
原文地址:https://www.cnblogs.com/chenchen-12/p/10098067.html