zoukankan      html  css  js  c++  java
  • 求二叉树的宽度

    二叉树的宽度是指二叉树各层结点个数的最大值。求二叉树的宽度可以依据与二叉树的层次遍历,我们知道,二叉树的层次遍历借助于deque实现,每次打印当前结点后将其左子树右子树入队,此时队列中既包含当前层的结点,也包含下一层的结点,若我们将当前层的结点全部出队,剩余的就是下一层的结点个数。所以,我们可以使用maxWidth来表示最大宽度,若下一层的结点个数大于maxWidth,则更新maxWidth,最终队列为空,得到的maxWidth即为二叉树的宽度。

    以下是C++实现的源代码:

    //求二叉树的宽度
    int WidthOfBiTree(BiTree root)
    {
    if(root == NULL)
    return 0;

    int maxWidth = 0;
    deque<BiTree> d;
    d.push_back(root);
    
    while(true)
    {
        int len = d.size();
        if(len == 0)
            break;
        while(len > 0)
        {
            BiTree temp = d.front();
            d.pop_front();
            len--;
            if(temp->Lchild)
                d.push_back(temp->Lchild);
            if(temp->Rchild)
                d.push_back(temp->Rchild);
        }
        maxWidth = maxWidth > d.size() ? maxWidth : d.size();
    
    }
    return maxWidth;
    

    }

    作者:ColiYin
    来源:CSDN
    原文:https://blog.csdn.net/sinat_20177327/article/details/78289905
    版权声明:本文为博主原创文章,转载请附上博文链接!

    /* 二叉树的宽度 在上一层遍历完成后,下一层的所有节点已经放到队列中,此时队列中的元素个数就是下一层的宽度*/
    /**********************************************************************/
    int WidthOfBinaryTree(BinaryTreeNode
    pNode){
    if (pNode == NULL)
    {
    return 0;
    }
    std::deque<BinaryTreeNode
    > dequeTreeNode;//双端队列
    int maxWidth = 1;//最大的宽度,用于当只有一个节点时候返回1
    dequeTreeNode.push_back(pNode);//头结点入队
    while (true)
    {

    	int length = dequeTreeNode.size();//当前层节点的个数
    	if (length == 0)//当前层没有节点,跳出循环
    	{
    		break;
    	}
    	while (length > 0)//如果当前层还有节点
    	{
    		BinaryTreeNode* pTemp = dequeTreeNode.front();
    		dequeTreeNode.pop_front();//出队
    		length--;//长度减一
    		if (pTemp->m_pLeft)
    		{
    			dequeTreeNode.push_back(pTemp->m_pLeft);//下一层节点入队
    		}
    		if (pTemp->m_pRight)
    		{
    			dequeTreeNode.push_back(pTemp->m_pRight);//下一层节点入队
    		}
    	}
    	maxWidth = maxWidth > dequeTreeNode.size() ? maxWidth : dequeTreeNode.size();//得到最大宽度
    }
    return maxWidth;
    

    }

  • 相关阅读:
    如何在SharePointDesigner订制页面里判断用户权限
    为SharePoint 2010中的FBA创建自定义登录页面
    javascript中的this到底指什么?
    用JAVASCRIPT实现静态对象、静态方法和静态属性
    简单的HoverMenu效果
    JavaScript 调用sharepoint内置webservice 更新item
    域中搜索用户email
    服务控制管理器错误
    SQL Server 2008/2005不能修改表结构的解决方法
    类集对枚举的支持
  • 原文地址:https://www.cnblogs.com/CCCrunner/p/11781670.html
Copyright © 2011-2022 走看看