int MaxWidth(BiTree T){
if(!T) return 0;
int front=0,rear=0; //front指向队首,rear指向队尾的后一个位置
int last=0,level=0; //last指向当前层的最右节点
BiTree Q[MaxSize];
Q[rear++]=T; //根节点入队
BiTree p;
int _max=1;
while(front<rear){
p=Q[front++]; //出队
if(p->lchild){
Q[rear++]=p->lchild;
}
if(p->rchild){
Q[rear++]=p->rchild;
}
if(front-1==last){ //刚出队的元素是否为当前层的最右节点节点
_max=MAX(_max,rear-front); //此时队里的节点是下一层的全部节点
last=rear-1; //更新last
}
}
return _max;
}