统计一个二叉树的每一层 节点个数

来源:互联网 发布:ubuntu 64位镜像下载 编辑:程序博客网 时间:2024/06/05 06:14
#include<stdio.h>#include<string.h>
#define MAX 100typedef struct TNode{    int data;    TNode *left, *right;}TNode;typedef struct QNode{    TNode *tNode;    QNode *next;    int level;}QNode;typedef struct Queue{    QNode *front;    QNode *rear;}Queue;int count[MAX];int level = 0;int InitTree(TNode *&root){    int value;    scanf("%d", &value);    if(value == 0)       root = NULL;    else    {    root = new TNode;    if(root == NULL)      return -1;    root->data = value;    InitTree(root->left);    InitTree(root->right);    }    return 0;}int InitQueue(Queue *&qu){    qu = new Queue;    if(qu == NULL)      return -1;    qu->front = qu->rear = new QNode;    if(qu->front == NULL)      return -1;    qu->front->tNode = NULL;    qu->front->next = NULL;    return 0;}int EnQueue(Queue *&qu, TNode *root, int level){    if(root == NULL)      return -1;    QNode *node = new QNode;    if(node == NULL)      return -1;    node->next = NULL;    node->tNode = root;    node->level = level;    count[level]++;    qu->rear->next = node;    qu->rear = node;    return 0;}int DeQueue(Queue *&qu, TNode *&tNode, int &level){    if(qu==NULL ||qu->front==qu->rear)      return -1;    QNode *node = qu->front->next;    tNode = node->tNode;    level = node->level;    qu->front->next = node->next;    if(qu->rear == node)      qu->rear = qu->front;    delete node;    return 0;}bool Empty(Queue *&qu) {    if(qu->front == qu->rear)      return true;    else      return false;}       int LevelVist(TNode *root, Queue *qu){    if(root == NULL)      return -1;        TNode *tNode;    int ret;    ret = EnQueue(qu, root, level);    if(ret == -1)      return -1;    while(!Empty(qu))    {        ret = DeQueue(qu, tNode, level);        if(ret == -1)          return -1;                if(tNode->left != NULL)          EnQueue(qu, tNode->left, level+1);        if(tNode->right != NULL)          EnQueue(qu, tNode->right, level+1);            }    return 0;}int main(){    memset(count, 0, 100);    TNode *root;    Queue *qu;    int ret;    ret = InitTree(root);    if(ret == -1)      printf("tree init fail!\n");    ret = InitQueue(qu);    if(ret == -1)      printf("queue init fail!\n");        ret = LevelVist(root, qu);    if(ret == -1)      printf("level visit fail!\n");    for(int i=0; i<=level; i++)       printf("level:%d    %d\n", i, count[i]);    return 0;}