- 利用队列进行层次遍历
- 获取各层的节点的个数
循环队列可以参考这篇文章
代码如下:
// 获取二叉树每一层的结点的个数
int *NumberOfFloorTree(BiTree *biTree, int *number, int deep) {
// floor 二叉树的层数
// deep 二叉树的深度
if (!biTree) return false;
QueueTree Q;
int i = 2;
BiTree *middle = biTree;
BiTree middle_null;
middle_null.leftChild = NULL;
middle_null.rightChild = NULL;
middle_null.data = ' ';
Q = InitQueueTree(20);
ENQueueTree(&Q, middle);
// 将空结点入列,作为每一层结束的标志
ENQueueTree(&Q, &middle_null);
number[1] = 1;
while (Q.tag != 0 && i <= deep) {
DEQueueTree(&Q, &middle);
if (middle->data == ' ') {
ENQueueTree(&Q, &middle_null);
i++;
continue;
}
if (middle->leftChild) {
number[i]++;
ENQueueTree(&Q, middle->leftChild);
}
if (middle->rightChild) {
number[i]++;
ENQueueTree(&Q, middle->rightChild);
}
}
}