2 shi ka shi_ka 于 2017.11.30 17:06 提问

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

新手渣渣 请教各位大神 问题出在哪 谢谢
#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
qq_41229589   2017.11.30 17:09

typedef struct BiTNode

weixin_41111490
weixin_41111490   2017.12.01 00:31

应该是最后check函数里的DeQueue那个函数有问题

u013591119
u013591119   2017.12.01 18:07

最后check函数里的DeQueue那个函数有问题

zzc11234567
zzc11234567   2017.12.01 19:43

应该是check函数里的DeQueue函数有问题

qq_30870117
qq_30870117   2017.12.01 20:45

DeQueue函数出了问题

qq_23405609
qq_23405609   2017.12.05 00:18

授人以鱼不如授人以渔 ,你一步步断开 执行 分析结果对不对

buzzgoing
buzzgoing   2017.12.07 17:07

DeQueue函数应该是出问题了

qq_41210015
qq_41210015   2017.12.10 22:16

可以去参考一下严蔚敏的数据结构

zenoszhang
zenoszhang   2018.03.01 21:31

DeQueue函数 看下

qq_34927683
qq_34927683   2018.03.03 11:46

单步运行DeQueue函数,查错

共16条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!