完全二叉樹
如果二叉樹中除去最後一層節點爲滿二叉樹,且最後一層的結點依次從左到右分佈,則此二叉樹被稱爲完全二叉樹。
直接上思路。層序遍歷一下,遇到第一個葉子 那麼後面出現的節點都應該是葉子節點。當然 還要判斷上圖的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));
}