版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/leekerian/article/details/88890428
注意对完全二叉树的定义判断
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
int s[500];
void insert(int r,int a)
{
if(s[r]==-1)
{
s[r]=a;
return;
}
if(s[r]<a)
insert(2*r,a);
else
insert(2*r+1,a);
}
void bfs()
{
queue<int> q;
q.push(1);
printf("%d",s[1]);
while(!q.empty())
{
int u=q.front();
q.pop();
if(u!=1)
printf(" %d",s[u]);
if(s[2*u]!=-1) q.push(2*u);
if(s[2*u+1]!=-1) q.push(2*u+1);
}
}
int main()
{
//freopen("t.txt","r",stdin);
int n,a;
scanf("%d",&n);
memset(s,-1,sizeof(s));
for(int i=0;i<n;i++)
{
scanf("%d",&a);
insert(1,a);
}
bfs();
bool fg=true;
for(int i=1;i<=n;i++)
if(s[i]==-1)
{
fg=false;
break;
}
if(fg) printf("\nYES");
else printf("\nNO");
return 0;
}