a_abbb 2017-11-30 09:06 采纳率: 0%
浏览 6264
已结题

c语言 判断二叉树是否为完全二叉树

新手渣渣 请教各位大神 问题出在哪 谢谢
#include 
#include 
#define TRUE  1
#define FALSE 0
#define OK 1
#define ERROR 0

typedef char TElemType;
typedef int Status;
typedef struct BiTNode{
TElemType data2;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;

typedef struct QNode
{
BiTree data1;          
struct QNode *next;
}QNode,*QueuePtr;

typedef struct 
{
QueuePtr front;   //队头指针
QueuePtr rear;    //队尾指针 
}LinkQueue;

Status InitQueue(LinkQueue *Q);             //关于队列的函数声明 
Status EnQueue(LinkQueue *Q,BiTree e);
Status DeQueue(LinkQueue *Q,BiTree *e);
Status QueueEmpty(LinkQueue Q);

Status InitBiTree(BiTree *T);               //关于二叉树的函数声明 
Status CreateBiTree(BiTree *T);   //啥意思啊 那个defination 
Status InOrderTraverse(BiTree T);
int Check(BiTree T);

Status InitQueue(LinkQueue *Q)   
{
Q->front=Q->rear=(QueuePtr)malloc(sizeof(QNode));
if(!Q->front)
exit(OVERFLOW);
Q->front->next=NULL;
return OK; 

Status EnQueue(LinkQueue *Q,BiTree e)   
{
QNode *p;
p=(QueuePtr)malloc(sizeof(QNode));   
if(!p)
exit(OVERFLOW);
p->data1->data2=e->data2;
p->data1->lchild=e->lchild;
p->data1->rchild=e->rchild;
p->next=NULL;
Q->rear->next=p;    
Q->rear=p;         
return OK; 

Status DeQueue(LinkQueue *Q,BiTree *e)   {
if(Q->front==Q->rear)
return ERROR;
QNode *p;
p=Q->front->next;
(*e)->data2=p->data1->data2;
(*e)->lchild=p->data1->lchild;
(*e)->rchild=p->data1->rchild;
Q->front->next=p->next;
if(Q->rear==p)          
Q->rear=Q->front;  
free(p);
return OK;

Status QueueEmpty(LinkQueue Q)   
{
if(Q.front==Q.rear)
return TRUE;
else
return FALSE;

Status InitBiTree(BiTree *T)     
{
*T=NULL;
return OK;
}  

Status CreateBiTree(BiTree *T)     
{
char ch;
scanf("%c",&ch);
if(ch=='*')
{
*T=NULL;
}
else
{
*T=(BiTree)malloc(sizeof(BiTNode));
(*T)->data2=ch;
CreateBiTree(&(*T)->lchild);
CreateBiTree(&(*T)->rchild);
}
return OK;
}

Status InOrderTraverse(BiTree T)   
{
if(T==NULL)
return 0;
else
{
InOrderTraverse(T->lchild);
printf("%c",T->data2);
InOrderTraverse(T->rchild);
}
return OK;
}

int Check(BiTree T)    
{
BiTree S;
LinkQueue Q;
int flag=0;
if(T)
{
InitQueue(&Q);
EnQueue(&Q,T);            
while(!(QueueEmpty(Q)))   
{
DeQueue(&Q,&S);      
if(!S)
{      
flag=1;
}

else 
{
if(flag)
return 0;
else
{
EnQueue(&Q,(S->lchild));
EnQueue(&Q,(S->rchild));
}
}
}
}
printf("\n");
return 1;

}

int main()
{

BiTree T;
int n;
InitBiTree(&T);
CreateBiTree(&T);
printf("\n中序遍历二叉树:");
InOrderTraverse(T);
n=Check(T);
printf("判断是否为完全二叉树 1-是 0-否:%d\n",n);
return 0;
}

  • 写回答

16条回答 默认 最新

  • qq_41229589 2017-11-30 09:09
    关注

    typedef struct BiTNode

    评论

报告相同问题?

悬赏问题

  • ¥15 操作系统相关算法中while();的含义
  • ¥15 CNVcaller安装后无法找到文件
  • ¥15 visual studio2022中文乱码无法解决
  • ¥15 关于华为5g模块mh5000-31接线问题
  • ¥15 keil L6007U报错
  • ¥15 webapi 发布到iis后无法访问
  • ¥15 初学者如何快速上手学习stm32?
  • ¥15 如何自动更换布娃娃图片上的衣服
  • ¥15 心理学eprime编程
  • ¥15 arduino esp8266开发