求二叉树的宽度

二叉树的宽度:树中最大的层节点数。
主要思路为:树不为空时,初始化父节点数(LastLevelWidth)为1(即头结点pop进队列),通过判断queue是否为空表示树全部节点遍历完成,以父结点数(LastLevelWidth)为while条件计算当层子结点数(CurLevelWidth更新LastLevelWidth,实现逐层遍历),当减自为0即表示该层结点遍历完成,将遍历的节点push进队列。每次都用?:记录最大的节点数,以便输出树的宽度。

typedef struct Node{
    int data;
    struct Node *Lchild,Node *Rchild;
}TreeNode;

int CountWidth(TreeNode *root)
{
    if(root == NULL)
        return 0;

    int LastLevelWidth = 0;
    int CurLevelWidth = 0;
    int initWidth = 1;

    queue<TreeNode *> myQueue;
    myQueue.push(root);
    LastLevelWidth = 1;

    TreeNode *cur = NULL;

    while(!myQueue.empty()) 
    {
        while(LastLevelWidth != 0)
        {
            cur = myQueue.front();  
            myQueue.pop();
            if(cur->Lchild != NULL)
                myQueue.push(cur->Lchild);
            if(cur->.Rchild != NULL)
                myQueue.push(cur->Rchild);

            LastLevelWidth--;
        }

        CurLevelWidth = myQueue.size();//父结点数遍历完毕即队列内的便是当前层子结点
        initWidth = LastLevelWidth > CurLevelWidth ? LastLevelWidt
                    : CurLevelWidth;    //记录最大结点数
        LastLevelWidth = CurLevelWidth;//更新,以便获取下一层结点数
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值