新手渣渣 请教各位大神 问题出在哪 谢谢
#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;
}