求二叉树的宽度

#define maxsize 100  //定义数据的最大值!

typedef struct BTNode {                //这里是树的节点定义
    int data;
    struct BTNode *lchild;
    struct BTNode *rchild;
}BTNode;

typedef struct st {                    //顺序非循环队列的队列元素(它里边可以存储节点指针,也可以存储该节点所在的层次号)
    BTNode *p;
    int lno;
}st;

int maxNode(BTNode* b) {
    st que[maxsize];
    int front, rear;
    front=rear= 0;                    //这里搞一个顺序非循环队列出来,并将其置空!
    int Lno = 0, i, j, n, max;
    BTNode *q;
    if (b != nullptr) {                //树非空的时候,
        ++rear;                        //根节点进队,这里注意相对于树的层次遍历多了一个lno的层次号
        que[rear].p = b;
        que[rear].lno = 1;
        while (front != rear) {        //当队列非空的时候,出队
            ++front;
            q = que[front].p;
            Lno = que[front].lno;    //关键语句,Lno存取当前节点的层次号
            if (q->lchild != nullptr) {        //左子树不空左子树入队
                ++rear;
                que[rear].p = q->lchild;
                que[rear].lno = Lno + 1;
            }
            if (q->rchild != nullptr) {        //右子树不空右子树入队
                ++rear;
                que[rear].p = q->rchild;
                que[rear].lno = Lno + 1;
            }
        }  //循环结束时候,Lno存储的是这棵树的最大层数!
        /*下边这些代码找出了含有节点最多的层中的节点数*/
        max = 0;
        for (i = 1; i <= Lno; i++) {    
            n = 0;
            for (j = 0; j < rear; j++) {
                if (que[j].lno == i)
                    n++;
            }
                if (max < n)
                    max = n;
        }
        return max;
    }
    else return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值