涉及到完全二叉树的时候还是用数组比较好鸭,root的左儿子是2*root, root的右儿子是2*root+1
如果用指针建树,好像不太好判断是否是完全二叉树
#include<iostream>
using namespace std;
const int N=100;
int num[N];
int maxx=0;
int n;
int main()
{
cin>>n;
for(int i=1;i<=n;++i)
{
int x;
cin>>x;
int now=1;
while(num[now])
{
if(x>num[now]) now=2*now;
else now=2*now+1;
}
if(now>maxx) maxx=now;
num[now]=x;
}
bool flag=true;
for(int i=1;i<=maxx;++i)
{
if(num[i])
{
if(i!=1) cout<<' ';
cout<<num[i];
}
else flag=false;
}
cout<<endl;
if(flag) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
return 0;
}