#include <stdio.h>
#include <stdlib.h>
#define MAXQSIZE 100
typedef struct BTNode{
char data;
struct BTNode *lchild,*rchild;
}BTNode,*BiTree;
typedef struct{
BiTree *base;
int front;
int rear;
}SqQueue;
void InitBiTree(BiTree &bt){
char ch;
ch = getchar();
if(ch == '#'){
bt = NULL;
}
else{
bt = (BiTree)malloc(sizeof(BTNode));
bt->data = ch;
InitBiTree(bt->lchild);
InitBiTree(bt->rchild);
}
}
void InitQueue(SqQueue &Q){
Q.base = (BiTree *)malloc(sizeof(BiTree) * MAXQSIZE);
if(!Q.base)
return ;
Q.rear = Q.front = 0;
}
void EnQueue(SqQueue &Q, BiTree e){
if(Q.front == (Q.rear + 1) % MAXQSIZE)
return ;
Q.base[Q.rear ] = e;
Q.rear = (Q.rear + 1) % MAXQSIZE;
}
void DeQueue(SqQueue &Q, BiTree &t){
if(Q.front == Q.rear )
return ;
t = Q.base[Q.front];
Q.front = (Q.front + 1) % MAXQSIZE;
}
int EmptyQueue(SqQueue Q){
if(Q.front == Q.rear)
return 1;
return 0;
}
int LevelOrderTraverse(BiTree bt){
BiTree t;
SqQueue Q;
if(bt){
InitQueue(Q); EnQueue(Q,bt);
while(!EmptyQueue(Q)){
DeQueue(Q,t);
if(t){
EnQueue(Q,t->lchild);
EnQueue(Q,t->rchild);
}
else{
while(!EmptyQueue(Q)){
DeQueue(Q,t);
if(t)
return 0;
}
}
}
return 1;
}
return 1;
}
int main(){
BiTree bt;
InitBiTree(bt);
if(LevelOrderTraverse(bt)){
printf("二叉树为完全二叉树!\n");
}
else{
printf("二叉树不是完全二叉树!\n");
}
return 0;
}
判断一棵树是否为完全二叉树
最新推荐文章于 2025-01-29 22:07:37 发布