二叉树,获取树的宽度

本文介绍了一个C++函数,用于计算给定树结构的最大层次并统计各层的节点数,通过队列实现层次遍历。
摘要由CSDN通过智能技术生成
#include<iostream>
using namespace std;
#define MAXSIZE 500
typedef struct tree{
        char data;
        struct tree *lchild;
        struct tree *rchild;

}tree,*Tree;

typedef struct TreeNode{
    Tree node;
    int Lno;
}TreeNode;

//获取数的宽度
//计算下层的层次号,就是当前层次加1,并将左右孩子存入队列中的时候,将层次号存入。并且计算出该层次中最多的元素
int maxNode(Tree t){
    TreeNode tQueue[MAXSIZE];
    int front = 0;
    int rear = 0;
    int levelNum = 1;
    Tree p;

    if(t != NULL){
        //存入头结点
        rear++;
        tQueue[rear].node = t;
        tQueue[rear].Lno = levelNum;

        //遍历队列
        while (front != rear){
            //出队当前队列
            front++;
            p = tQueue[front].node;
            levelNum = tQueue[front].Lno;

            //如果当前节点的左孩子不为空,则存入到队列中
            if(p->lchild != NULL){
                rear++;
                tQueue[rear].node = p->lchild;
                tQueue[rear].Lno = levelNum + 1;//存入下一节点时,同时存上下一节点的节点号
            }    
            //如果当前节点的右孩子不为空,则存入到队列中
            if(p->rchild != NULL){
                rear++;
                tQueue[rear].node = p->rchild;
                tQueue[rear].Lno = levelNum + 1;//存入下一节点时,同时存上下一节点的节点号
            }
        }


        //rear存的是当前所有节点的节点数
        //levelNum存的是最大层。
        //一层一层遍历,找到最大的一层
        int max = 1;//记录最大的一层数
        int n = 0;//记录每层节点数
        for (int i = 1; i <= levelNum;i++){
            for(int j = 0;j < rear;j++){
                if(tQueue[j].Lno == i){
                    n++;
                }
            }
            if(n > max){
                max = n;
            }
        }
        
        return max;
    }
    return 0;
}

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寒武纪07

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值