完全二叉树
如果二叉树中除去最后一层节点为满二叉树,且最后一层的结点依次从左到右分布,则此二叉树被称为完全二叉树。
直接上思路。层序遍历一下,遇到第一个叶子 那么后面出现的节点都应该是叶子节点。当然 还要判断上图的b)的情况
由于没有大量的数据来验证,我在代码里自己构造了一个数据,有错误欢迎指正~
【代码】
#include<bits/stdc++.h>
using namespace std;
struct node
{
int w;
node *left;
node *right;
};
bool bfs(node *head)
{
queue<node *>que;
que.push(head);
int flag=0;
while(que.size())
{
node *now=que.front();que.pop();
//printf("w:%d\n",now->w);
if(flag&&(now->left!=NULL||now->right!=NULL)) {//前面出现叶子且当前不是叶子
//printf("wwww");
return false;
}
if(now->left==NULL&&now->right!=NULL) {//只有右节点
return false;
}
if(now->left==NULL&&now->right==NULL) {
flag=1;
}
if(now->left!=NULL) que.push(now->left);
if(now->right!=NULL) que.push(now->right);
}
}
int main()
{
node *head=new node();
head->w=1;
node *l1=new node();
l1->w=2;
node *r1=new node();
r1->w=3;
head->left=l1;
head->right=r1;
node *l2=new node();
l2->w=4;
node *r2=new node();
r2->w=5;
l1->left=l2;
l1->right=r2;
node *l3=new node();
l3->w=6;
r1->left=l3;
printf("%d\n",bfs(head));
}