编写算法判定给定的二叉树是否为完全二叉树
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <malloc.h>
#include <queue>
using namespace std;
typedef struct tnode
{
int data;
struct tnode *lchild,*rchild;
}*bitree;
int creattree(bitree &bt)
{
char ch;
scanf("%c",&ch);
getchar();
if(ch=='#')bt=NULL;
else
{
bt=(tnode*)malloc(sizeof(tnode));
bt->data=ch;
printf("输入%c的左子节点:", ch);
creattree(bt->lchild);
printf("输入%c的右子节点:", ch);
creattree(bt->rchild);
}
return 1;
}
int isCBT(bitree bt) //按层次顺序一层层进队列
{
queue<struct tnode*>que;
bitree p;
int flag=0; //标记,若遇到空结点则变为1
que.push(bt);
while(!que.empty())
{
p=que.front();
que.pop();
if(!p)flag=1;
else if(flag) return 0;
else
{
que.push(p->lchild);
que.push(p->rchild);
}
}
return 1;
}
int main()
{
bitree bt;
int k;
bt=(tnode*)malloc(sizeof(tnode));
printf("输入根节点:");
creattree(bt);
k=isCBT(bt);
if(k)printf("是完全二叉树\n");
else printf("不是完全二叉树\n");
return 0;
}