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