判断完全二叉树方法
bfs时判断,如果有右子树则必有左子树,如果有左子树无右子树或无左右子树则后面全为叶子节点
#include<iostream>
#include<queue>
using namespace std;
int n,x,flag,t=1;
typedef struct node{
int data;
node *l,*r;
}node,*tree;
tree p;
void build(tree&a,int u){
if(!a){
a=new node;
a->data=u;
}else if(u>a->data)build(a->l,u);
else build(a->r,u);
}
void cengxu(tree a){
queue<tree>p;
p.push(a);
while(!p.empty()){
auto it=p.front();
p.pop();
if(flag)printf(" ");
flag=1;
printf("%d",it->data);
if(it->r&&!it->l)t=0;
if(it->l){p.push(it->l);if(t==-1)t=0;}
if(it->r){p.push(it->r);if(t==-1)t=0;}
if(t==1&&((it->l&&!it->r)||(!it->l&&!it->r)))t=-1;
}
printf("\n");
}
int main(){
cin>>n;
for(int i=0;i<n;i++)cin>>x,build(p,x);
cengxu(p);
if(t!=0)puts("YES");
else puts("NO");
}