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