用循环队列对二叉树进行层次遍历并求最大层数
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
#define D 20
typedef struct node{
int data;
struct node *lchild,*rchild;
}Node,*BiTree;
typedef struct{
Node *node;
int layer;
}BTNRecord;
void CreateBiTree(BiTree &T)
{
char ch;
scanf("%c",&ch);
if(ch=='#')T=NULL;
else{
T=(Node*)malloc(sizeof(Node));
T->data=ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
}
int ss(BiTree T)
{
BTNRecord Q[MAXSIZE],p;
int count[D];
int k,max,f=0,r=0,i;
for(k=0;k<D;k++)
count[k]=0;
if(T==NULL) return 0;
Q[r].node=T;Q[r++].layer=1;
while(f!=r)
{
p=Q[f];
printf("%c ",p.node->data);
f=(f+1)%MAXSIZE;
count[p.layer]++;
if(p.node->lchild)
{Q[r].node=p.node->lchild;Q[r].layer=p.layer+1;r=(r+1)%MAXSIZE;}
if(p.node->rchild)
{Q[r].node=p.node->rchild;Q[r].layer=p.layer+1;r=(r+1)%MAXSIZE;}
}
for(max=count[1],i=2;i<=p.layer;i++)
if(count[i]>max) max=count[i];
return max;
}
int main()
{
BiTree T;
CreateBiTree(T);
printf("%d",ss(T));
}