用队列判断完全二叉树,找不出错误
#include "stdlib.h"#include "stdio.h"
#define maxsize 100
struct node
{
char date;
struct node *lch,*rch;
};
struct node *creat(struct node *root) \\创建二叉树
{
char x;
int i,j;
struct node *p,*s[maxsize];
printf("input i,x:");
scanf("%d,%c",&i,&x);
while(x!='0'&&i!=0)
{
p=(struct node*)malloc(sizeof(struct node));
p->date=x;
p->lch=NULL;
p->rch=NULL;
s[i]=p;
if(i==1)
root=p;
else
{j=i/2;
if(i%2==0)
s[j]->lch=p;
else
s[j]->rch=p;
}
scanf("%d,%c",&i,&x);
}
return (root);
}
int panduan()
{ int front=1,rear=1;
struct node *root,*s[maxsize];
root=(struct node*)malloc(sizeof(struct node));
root=creat(root);
s[front]=root;
while((s[front]->lch!=NULL)&&(s[front]->rch!=NULL))\\找出左右孩子有一个为空的叶子
{
s[++rear]=s[front]->lch;
s[++rear]=s[front]->rch;
front++;
}
if((s[front]->lch=NULL)&&(s[front]->rch!=NULL))\\若左为空右不为空则返回0
return 0;
else
{
if((s[front]->lch!=NULL)&&(s[front]->rch=NULL))\\若左不为空右为空则左进队
{s[++rear]=s[front]->lch;}
while(front!=rear&&((s[front]->lch!=NULL)||(s[front]->rch!=NULL)))\\判断后面是否全为空的叶子
{
front++;
}
if(rear==front)
return 1;
else
return 0;
}
}
main()
{
int i;
i=panduan();
if(i==1)
printf("是完全二叉树");
else
printf("不是完全二叉树");
}
只能返回0.我找不到哪儿错了
学得不好请多指教