二叉树的层次遍历和(叶子)节点

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define size 100
#define resize 10 
typedef struct Bitnode{        //定义结点
    char data;
    struct Bitnode *lchild,*rchild;
}Bitnode,*Bitree;

typedef struct {             //定义队列
    Bitree *base;
    int front;
    int rear;
}Queue;

int count=0;

void Initqueue(Queue &Q)            //建立队列
{
    Q.base=(Bitree*)malloc(size*sizeof(Queue));
    if(!Q.base)
        exit(0);
    Q.front=Q.rear=0;    
}

Bitree Enqueue(Queue &Q,Bitree e)        //入队列
{
    if((Q.rear+1)%size==Q.front)        //循环队列
        return 0;
    Q.base[Q.rear]=e;
    Q.rear=(Q.rear+1)%size;
    return e;
}

int Queueempty(Queue Q)          //队列的判空操作
{
    if(Q.front==Q.rear)
        return 1;
    return 0;
}

void Dequeue(Queue &Q,Bitree &e)          //出队列
{
    
    if(Q.front==Q.rear)
        exit(0);
    e=Q.base[Q.front];
    Q.front=(Q.front+1)%size;
}
void Createbitree(Bitree &bt)
{
    //建立二叉树的二叉链表
    char ch;
    ch=getchar();
    if(ch=='#')
        bt=NULL;
    else
    {
        bt=(Bitree)malloc(sizeof(Bitnode));
        bt->data=ch;
        bt->lchild=bt->rchild=NULL;
        count++;
        Createbitree(bt->lchild);
        Createbitree(bt->rchild);    
    } 
}

void Levelordertraverse(Bitree bt)       //二叉树的层次遍历
{
    Bitree p;
    Queue Q;
    if(bt)
    {
        Initqueue(Q);
        Enqueue(Q,bt);
        while(!Queueempty(Q))
        {
            Dequeue(Q,p);
            printf("%c ",p->data);
            if(p->lchild)
                Enqueue(Q,p->lchild);
            if(p->rchild)
                Enqueue(Q,p->rchild);
        }
    }
    printf("
");
}

void Leafnode(Bitree bt)        //找叶子结点
{
    Bitree p;
    Queue Q;
    if(bt)
    {
        Initqueue(Q);
        Enqueue(Q,bt);
        while(!Queueempty(Q))
        {
            
            Dequeue(Q,p);
            if(p->lchild||p->rchild)
            {
                if(p->lchild)
                Enqueue(Q,p->lchild);
                 if(p->rchild)
                Enqueue(Q,p->rchild);
            }
            else
            printf("%c ",p->data);
        }
    }
    printf("
");
}

int main()
{
    Bitree bt;
    Createbitree(bt);
    printf("层次遍历二叉树:
");
    Levelordertraverse(bt); 
    printf("输出叶子结点:
");
    Leafnode(bt);
    printf("输出结点总数:%d
",count);
    return 0;
}

//ABD###CE##F##
原文地址:https://www.cnblogs.com/linxiaojie517/p/7771477.html