#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;
}