/*
名称:求二叉树的宽度
说明:此程序用的是层次遍历法。通过记录每一层的节点个数,在比较,得出最大一层的节点个数,即树的宽度。
*/
//求树的宽度(层次遍历法)
int WidthOfTree(BiTree T)
{
queue<BiTNode *> _que;
int most_width = 0,temp_width = 0; //前者用来记录最大的宽度
BiTNode *p = NULL,*lay_r = NULL; //lay_r用来记录每一层的最后一个结点
_que.push(T);
lay_r = T;
while(p != NULL || _que.empty() == false)
{
p = _que.front();
_que.pop();
if(p->lchild != NULL)
_que.push(p->lchild); //左子树入栈
if(p->rchild != NULL)
_que.push(p->rchild); //右子树入栈
if(p == lay_r) //如果是最后一个节点,则进行统计造作
{
if(++temp_width > most_width) //此层的宽度是否大于以前最大的宽度
most_width = temp_width;
if(_que.empty() == false)
lay_r = _que.back();
else
{
lay_r = NULL;
p = NULL;
}
temp_width = 0;
}
else
{
++temp_width;
}
}
return most_width;
}