采用层次遍历法求二叉树b中第k层结点的个数
#include "sqqueue.cpp" //因为sqqueue.cpp文件里已经调用了btree.cpp,所以这里不能重复调用了
void LevelOrder(BTNode *b,int k)
{
SqQueue *qu; //qu为顺序队指针
InitQueue(qu);
BTNode *p; //p指向出队元素
int curl=1,cnt,i; //curl表示当前层数,cnt为当前层的结点个数
enQueue(qu,b); //将根结点入队 注意b的类型是BTNode的,所以sqqueue.cpp文件要进行修改
while(!QueueEmpty(qu)&&curl!=k)
{
cnt=CountQueue(qu);
for(i=0;i<cnt;i++)
{
deQueue(qu,p); //将这一行所有结点出队
if(p->lchild!=NULL) //将这一行所有孩子结点入队
enQueue(qu,p->lchild);
if(p->rchild!=NULL)
enQueue(qu,p->rchild);
}
curl++;
}
cnt=CountQueue(qu);
printf("%d",cnt);
}
int main()
{
SqQueue *qu;
BTNode *b;
char str[MaxSize];
int k;
printf("请输入一个字符串:");
gets(str);
CreateBTree(b,str);
printf("创建的二叉树为:");
DispBTree(b);
printf("\n");
printf("请输入要看的层数:");
scanf("%d",&k);
printf("第%d层的结点个数为:",k);
LevelOrder(b,k);
DestroyQueue(qu);
return 0;
}
sqqueue.cpp文件里面包含了二叉树基本算法和队列基本算法
不知道哪里出错了,如果查看第一行输出没问题,查看其他行就没有结果了,哪里错了啊