原题:编写按层次遍历二叉树的算法.(分析:显然这种问题适合用队列实现)
#include<iostream>
#include<time.h>
#define ElemType char
#define NodeNum 5
using namespace std;
//二叉树的双链表存储结构
typedef struct BiTNode
{
ElemType data;//数据域
struct BiTNode *lchild, *rchild;//左右孩子指针
}BiTNode, *BiTree;
//队列的数据结构
typedef struct QNode
{
BiTree base;//初始化的分配存储空间
int front;//头指针针,若队列不空,则指向队头元素
int rear;//尾指针,若队列不空,则指向队尾元素的下一个元素
}SqQueue;
int InitQueue(SqQueue &Q)//初始化一个空队列
{
Q.base = (BiTNode *)malloc((NodeNum+3) * sizeof(BiTNode));//队列基址指针
if(NULL == Q.base)//若分配内存失败
{
cout<<"存储分配失败!"<<endl<<endl;
return -1;
}
Q.front = Q.rear = 0;//初始化队头和队尾指针
return 1;
}
int EnQueue(SqQueue &Q, BiTree node)//在队尾插入新的元素作为新的队尾
{
if(Q.front == (Q.rear+1)%(NodeNum+3))
{
cout<<"队列已满!"<<endl<<endl;
return -1;
}
Q.base[Q.rear] = *node;
Q.rear = (Q.rea