二叉树的层次遍历算法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

二叉树层次遍历算法实现

问题描述

对任意输入的表示某二叉树的字符序列,完成二叉树的层次遍历算法,并输出其遍历结果。

注:所需Queue ADT的实现见附录。

输入描述

从键盘上输入一串字符串,该字符串为二叉树的先序遍历结果,其中如果遍历到空树时用字符”#”代替。

输出描述

从显示器上输出二叉树的按层次遍历结果。

输入与输出示例

输入:

+A##/*B##C##D##

输出:

+A/*DBC

输入:

ABD##GJ###CFH##I###

输出:

ABCDGFJHI

附录(仅供参考):

#include

#include

#define TRUE 1

#define FALSE 0

#define MAX_QUEUE_SIZE 100

//注:需要定义ElementType类型,如果是二叉树,

// 则应定义为指向二叉树中结点的指针类型

//格式如:

// typedef Tree ElementType;

// 队列存储结构采用循环队列

struct QueueRecord;

typedef struct QueueRecord *Queue;

int IsEmpty(Queue Q);

int IsFull(Queue Q);

Queue CreateQueue(int MaxElements);

void DisposeQueue(Queue Q);

void MakeEmpty(Queue Q);

int Enqueue(ElementType X, Queue Q);

ElementType Front(Queue Q);

int Dequeue(Queue Q, ElementType &X);

#define MinQueueSize ( 5 )

struct QueueRecord

{

int Capacity;

int Front;

int Rear;

ElementType *Array;

};

int IsEmpty(Queue Q)

{

return ((Q->Rear + 1)% Q->Capacity == Q->Front); }

int IsFull(Queue Q)

{

return ((Q->Rear + 2) % Q->Capacity == Q->Front); }

Queue CreateQueue(int MaxElements)

{

Queue Q;

if (MaxElements < MinQueueSize)

return NULL;

Q = (Queue)malloc(sizeof(struct QueueRecord));

if (Q == NULL) return NULL;

Q->Array = (ElementType *)malloc(

sizeof(ElementType) * MaxElements);

if (Q->Array == NULL) return NULL;

Q->Capacity = MaxElements;

MakeEmpty(Q);

return Q;

}

void DisposeQueue(Queue Q)

{

if (Q != NULL)

{

free(Q->Array);

free(Q);

}

}

void MakeEmpty(Queue Q)

{

Q->Front = 1;

Q->Rear = 0;

}

static int Succ(int Value, Queue Q)

{

if (++Value == Q->Capacity)

Value = 0;

return Value;

}

int Enqueue(ElementType X, Queue Q)

{

if (IsFull(Q)) return FALSE;

else

{

Q->Rear = Succ(Q->Rear, Q);

Q->Array[Q->Rear] = X;

}

}

ElementType Front(Queue Q)

{

if (IsEmpty(Q)) return FALSE;

return Q->Array[Q->Front];

}

int Dequeue(Queue Q, ElementType &X)

{

if (IsEmpty(Q))

{

return FALSE;

}

else

{

X = Q->Array[Q->Front];

Q->Front = Succ(Q->Front, Q);

}

return TRUE;

}

相关文档
最新文档