求二叉树的宽度

来源:互联网 发布:只有我不在的城市 知乎 编辑:程序博客网 时间:2024/05/21 08:29

/*
名称:求二叉树的宽度
说明:此程序用的是层次遍历法。通过记录每一层的节点个数,在比较,得出最大一层的节点个数,即树的宽度。

*/

//求树的宽度(层次遍历法)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;}
原创粉丝点击