首页 > 其他分享 >计算二叉树的最大宽度

计算二叉树的最大宽度

时间:2022-10-14 13:56:20浏览次数:62  
标签:num 队列 max ++ EnQueue 宽度 二叉树 计算

求非空二叉树的宽度

算法思想:层序遍历二叉树,并用两个队列A,B交替存储结点,当队列A中元素为空时队列B就存储了下一层的所有结点,同理,队列B为空时队列A也就存储了下一层的所有结点。记录每层的最大宽度并与当前最大宽度比较并更新最大宽度,遍历完所有结点后即可求出最大宽度。

image-20221014134316865
int BTWidth(BiTree bt){
    int max=0,num=0;
    InitQueue(A); InitQueue(B);          //初始化A B两队列
    EnQueue(A,bt); max++;                //先让根节点入队,并让max=1
    BiTree p;                            //定义p指针用来出队或入队
    while(!IsEmpty(A)||!IsEmpty(B)){     //当两个队列都为空时结束循环
        while(!IsEmpty(A)){              //A出队,记录B中的宽度
            num=0;
            DeQueue(A,p)                 //让A的对头出队并用p指向他
            if(p->lchild){               //若有左孩子,则左孩子进入队B
                EnQueue(B,p->lchild);   
                num++;
            }    
            if(p->rchild){               //若有右孩子,则右孩子进入队B
                EnQueue(B,p->rchild);
                num++;
            }
        }
        max=(max>num)?max:num;       //更新最大宽度(与B中宽度比较)
        while(!IsEmpty(B)){              //B出队,记录A中的宽度
            num=0;
            DeQueue(B,p)                 
            if(p->lchild){               //若有左孩子,则左孩子进入队A
                EnQueue(A,p->lchild);
                num++;
            }
            if(p->rchild){               //若有右孩子,则右孩子进入队A
                EnQueue(A,p->rchild);
                num++;
            }
        }
        max=(max>num)?max:num;       //更新最大宽度(与A中宽度比较)
    }
    return max;
}

标签:num,队列,max,++,EnQueue,宽度,二叉树,计算
From: https://www.cnblogs.com/Auous/p/16791382.html

相关文章

  • Python在计算内存时应该注意的问题?
    我之前的​​一篇文章​​​,带大家揭晓了Python在给内置对象分配内存时的5个奇怪而有趣的小秘密。文中使用了​​sys.getsizeof()​​来计算内存,但是用这个方法计算时,可......
  • 三点共圆的计算代码(Python版本)
    已知三点坐标,计算圆心和半径defcalc_circle_center_and_radius(p1,p2,p3):x1=p1.xy1=p1.yz1=p1.zx2=p2.xy2=p2.yz2=p2......
  • 【前端】【JavaScript】简单的加减乘除计算器
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title></head><body><inputtype="text"id="number1"><selectid="s......
  • 洛谷 题解 P1572 计算分数
    题目描述Csh被老妈关在家里做分数计算题,但显然他不愿意坐这么多复杂的计算。况且在家门口还有Xxq在等着他去一起看电影。为了尽快地能去陪Xxq看电影,他把剩下的计算题......
  • 蜂鸣器电路计算
    1、常用三极管电路设计——电阻取值关注参数:电流放大倍数β三极管作为开关用途:工作在饱和区(导通),工作在截止区(不导通)   啥叫饱和状态?假定三极管工作在放大状态,那......
  • 云计算-字节-自动驾驶-汽车漫谈
    云计算-字节-自动驾驶-汽车漫谈边缘云市场份额,百度智能云领先!近日,IDC发布《中国边缘云市场解读,2022》。报告显示,2021年中国边缘公有云服务市场份额,百度智能云以13.8%的......
  • Greenplum数据库数据分片策略Hash分布——计算哈希值和映射
    哈希Hash分布是Greenlum最常用的数据分布方式。根据预定义的分布键(distributedbykey)计算用户数据的哈希值,然后把哈希值映射到某个segment上。分布键可以包含多个字段。......
  • 计算机网络(learning Records)
    背景:没想到本专业并不开设这门课程,感觉过于逆天,之前开发的时候了解过相关知识但是从来没有系统地学过,就自己看了书,总结一下参考:《TCP/IP详解卷1:协议》概述大多数网......
  • 计算机网络学习笔记
    计算机网络的概念相互分享资源的互联起来的自治计算机(computers)的集合自治(autonomous):非主从关系,对等的行为模式互联(interconnected):通信计算机(computers):数字化(数据,信......
  • 代码随想录 | 进阶二叉树
    二叉树的构造默认如下:/***Definitionforabinarytreenode.*publicclassTreeNode{*intval;*TreeNodeleft;*TreeNoderight;*......