二叉树层序遍历
要求 先列出根,然后列出深度为一的那些节点,在列出深度为2的节点等等;
刚开始写这个程序,网上看了几篇,用了好多指针,初学乍道,没盯紧指针,有点眼花缭乱,所以按照自己思路写出来,验证可以:
#include"stdio.h"
#include"stdlib.h"
#define EOF (-1)
#define ElementType int
#define FatalError(str) fprintf(stderr,"%s\n",str),exit(1)
#define MaxSize 100
#define Error 0
#define Ok 1
typedef struct TreeNode *PtrToNode;
typedef PtrToNode Tree;
struct TreeNode
{
ElementType Element;
Tree Left;
Tree Right;
};
struct QueueRecord;
typedef struct QueueRecord *Queue;
void Enqueue(Tree T,Queue Q);
struct QueueRecord
{
int Capacity;//队列的最大容量
int Front;
int Rear;
int Size;
Tree Tm[MaxSize];
};
/*
function:CreateQueue()
功能:初始化队列
*/
Queue CreateQueue()
{
Queue Q;
Q=(Queue)malloc(sizeof(struct QueueRecord));
Q->Capacity=MaxSize;
Q->Front=0;
Q->Rear=0;
Q->Size=0;
Q->Tm[Q->Front]=NULL;
return Q;
}
/*
函数: Succ(Value,Q)
描述:Value:队列的队尾指标,Q 表示当前队列
功能:判断队列是否溢出,并使队尾自加1,返回;
*/
int Succ(int Value,Queue Q)
{
if(++Value==Q->Capacity)
Value=0;
return Value;
}
/*
函数:Enqueue(Bt,Q)
描述:Bt为当前要入队列的节点,Q为当前队列
功能:使指针所在的节点进入队列
*/
void Enqueue(Tree Bt,Queue Q)
{
++Q->Size;
Q->Rear=Succ(Q->Rear,Q);
Q->Tm[Q->Rear]=Bt;
}
/*
函数:Insert(X,T)
描述:X,二叉树中带插入值,T为根节点
功能:将X按照查找二叉树形式插入树中
*/
Tree Insert(ElementType X,Tree T)
{
if(T==NULL)
{
T=(Tree)malloc(sizeof(struct TreeNode));
if(T==NULL)
FatalError("out of place");
else
{
T->Element=X;
T->Left=T->Right=NULL;
}
}
else
{
if(X<T->Element)
T->Left=Insert(X,T->Left);
else
if(X>T->Element)
T->Right=Insert(X,T->Right);
}
return T;
}
/*
函数:CreateTree(T1)
描述 T1为定义的二叉树
功能:将键盘中敲入的数创建为二叉树
*/
Tree CreateTree(Tree T1)
{
int a;
T1=NULL;
while(scanf("%d",&a))
{ if(a==0) //a为零时表示结束;
break;
else
T1=Insert(a,T1);
}
return T1;
}
/*
函数:LevelOrder(T1)
描述:T1为已经建好的二叉树
功能:将二叉树以层序的方式遍历,使用Enqueue函数
*/
void LevelOrder(Tree T1)
{
Queue Q;
Q=CreateQueue();
Tree P;
P=T1;
if(P) Enqueue(P,Q);
++Q->Front;
while((Q->Front)<=(Q->Size))
{
P=Q->Tm[Q->Front];
printf("%d\n",P->Element);
if(P->Left) Enqueue(P->Left,Q);
if(P->Right) Enqueue(P->Right,Q);
++Q->Front;
}
}
int main()
{
Tree HeadT;
HeadT=CreateTree(HeadT);
LevelOrder(HeadT);
return 0;
}
一个相对简单的程序