比较简单的一题
遍历左右的时候注意一下
#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; }