C++ HOJ 求解二叉树的宽度(队列实现)

原创 2015年07月07日 21:36:37

【摘要】

我们可以把二叉树中每层的节点依次放入一个队列中。设置一个变量width用于存储树的宽度。每一层的节点入队时计算该层节点的数目,如果该层次节点的数目大于width的值,那么把该层次节点的数目赋给width.如此,对二叉树按层遍历一遍之后width中保存的就是该二叉树的宽度。

【算法思想】

队列实现层次遍历,找到下一层的子节点入队,子节点一次遍历保证一次单层测宽,最终获取树宽。

【源码实现】

int WidthOfTheTree(Node* pRoot)  
{  
    if(pRoot==NULL)  
        return 0;  
    queue<Node*> MyQueue2;  
    MyQueue2.push(pRoot);  
    int width=1;  
    int curwidth=1;  
    int nextwidth=0;  
    while(!MyQueue2.empty())  
    {  
        while(curwidth!=0)  
        {  
            Node* pTmp=MyQueue2.front();  
            MyQueue2.pop();  
            curwidth--;  
            if(pTmp->pLeft!=NULL)  
            {  
                MyQueue2.push(pTmp->pLeft);  
                nextwidth++;  
            }  
            if (pTmp->pRight!=NULL)  
            {  
                MyQueue2.push(pTmp->pRight);  
                nextwidth++;  
            }  
        }  
        if(nextwidth>width)  
            width=nextwidth;  
        curwidth=nextwidth;  
        nextwidth=0;  
    }  
    return width;  
}  

数据结构——二叉树的最大宽度

原文地址:Maximum width of a binary tree已知一个二叉树,写一个函数得到已知二叉树的最大宽度。一个树的宽度指的是所有层的宽度的最大值。我们想一下下面的例子: ...
  • sinat_36246371
  • sinat_36246371
  • 2016年12月03日 15:40
  • 1269

二叉树的宽度优先遍历(队列实现)

给出每个子结点到根结点的路径,可以进行输入建树; 然后用宽度优先搜索的方法遍历这棵二叉树; 宽度优先搜索需要用到队列,队列中头部出来一个,尾部需要进去两个,直到叶子结点为止! #include #in...
  • u012492762
  • u012492762
  • 2014年03月12日 15:17
  • 1510

二叉树最大宽度(递归方式和非递归方式)

求二叉树的最大宽度,该问题可以有两种方式来解决。递归方式和非递归方式。 1、递归方式为先递归求得每一层的宽度,然后就得出了最大宽度所在的层数和该层的节点个数,即为最大宽度。 2、非递归方式为从树的...
  • u012796139
  • u012796139
  • 2015年10月24日 10:13
  • 2208

数据结构中求二叉树的高度和宽度C++代码

  • 2010年01月05日 10:36
  • 3KB
  • 下载

求C++数据结构二叉树的宽度

/*之前因为一直自己在想怎么构建二叉树,耽搁了继续去求二叉树的宽度;下面我想谈谈我自己关于怎么去求二叉树的最大宽度的想法 我非常肯定一些大神用各种简单的代码求二叉树的宽度,但是自己想出来的也是挺好的,...
  • CLOCK_ZHONG_ZHEN
  • CLOCK_ZHONG_ZHEN
  • 2015年12月08日 22:30
  • 1086

计算二叉树的最大宽度(非递归)

在做PTA作业的时候接触到了这个题,花了一个小时完全弄明白他的原理,我真是笨啊!!! 思考这个问题,怎样才能层序遍历二叉树? 那就是用队列,每当有一个节点出队列,则将这个出队列的节点的左右孩子入队...
  • qq_35859033
  • qq_35859033
  • 2017年11月02日 21:51
  • 452

求二叉树的深度和宽度

1 二叉树的深度题目: 输入一个二叉树的根节点,求该树的深度。从根节点到叶子节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度包含的节点数为为树的深度,即二叉树节点的层数。二叉树的节...
  • K346K346
  • K346K346
  • 2016年04月06日 17:41
  • 22177

二叉树最大宽度

用两个队列找出二叉树的最大宽度 #include #include using namespace std; typedef int T; struct treeNode { ...
  • luqinwei
  • luqinwei
  • 2017年02月20日 19:57
  • 535

算法学习 - 求二叉树的宽度

二叉树的宽度二叉树的宽度定义为 整个二叉树各层节点数,其中最大的值为这个二叉树的宽度。 所以二叉树的第一层就是1(根节点)。代码实现(C++)代码实现比较简单,树的遍历一般用递归比较方便。// // ...
  • chenfs1992
  • chenfs1992
  • 2015年03月11日 18:17
  • 3226

二叉树系列——二叉树的宽度(百度面试题)

所谓二叉树的宽度是指:二叉树各层节点个数的最大值。 我们知道层序遍历二叉树是使用deque来实现的:每次打印一个节点之后,如果存在左右子树,则把左右子树压入deque,那么此时的队列中可能既包含当前层...
  • liuyi1207164339
  • liuyi1207164339
  • 2016年03月16日 09:32
  • 5720
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++ HOJ 求解二叉树的宽度(队列实现)
举报原因:
原因补充:

(最多只允许输入30个字)