二叉树(二叉链表)求树的宽度,即具有结点树最多的那一层的结点个数

本文介绍了如何求解二叉树的最大宽度,主要算法思想是层次遍历。通过维护当前层数(level)和每层最右结点(last),比较出队元素与last的位置关系来更新层数和记录每层结点数。此外,还提出了另一种层次遍历思路,先获取所有结点的层次信息,然后在队列中扫描求解最大层节点数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 算法思想

 采用层次遍历的思想。level为当前层数,last始终指向每层的最右结点,层次遍历出队一个元素和last指向的元素比较,若相同,层数加一,并将当前层数结点个数存到一个数组中,last指向下一层的最右结点。重复执行到队列为空时结束,然后在结点数数组中找到最大的结点数即为所求。

 还可以采用以下思路,请读者自行编写程序。依然是采用层次遍历的方法,先求出所有结点的层次,并将所有结点和对应的层次放到一个队列中。然后通过扫描队列求出各层的结点总数,最大的层节点数即为所求。

 

 

#include<iostream>
    using namespace std;

    typedef  char ElemType;
    typedef struct BiTNode{
        ElemType data;
        struct BiTNode *lchild,*rchild;
    }BiTNode,*BiTree;

    //创建二叉树
    void CreateBT(BiTree &T){
        char ch;
        cin>>ch; //先输入节点值 
        if(ch == '#') T=NULL; //递归结束建空树 
        else{
            T = new BiTNode;  ///生成结点 
            T->data=ch;
            CreateBT(T->lchild);
            CreateBT(T->rchild);
        }
    } 
    int Bwideth(BiTree T){
	B
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值