层次遍历二叉树

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

课程设计

题目按层次遍历二叉树

学院计算机科学与技术

专业计算机科学与技术

班级0801

姓名陈新

指导教师孙玉芬

2012 年 6 月20 日

课程设计任务书

学生姓名:专业班级:

指导教师:孙玉芬工作单位:计算机科学系

题目: 按层次遍历二叉树

初始条件:

编写按层次顺序(同一层自左至右)遍历二叉树的算法。

(1)二叉树采用二叉链表作为存储结构。

(2)按题集p44面题6.69所指定的格式输出建立的二叉树。

(3)输出层次遍历结果。

(4)测试用例自己设计。

要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)

课程设计报告按学校规定格式用A4纸打印(书写),并应包含如下内容:

1、问题描述

简述题目要解决的问题是什么。

2、设计

存储结构设计、主要算法设计(用类C语言或用框图描述)、测试用例设计;

3、调试报告

调试过程中遇到的问题是如何解决的;对设计和编码的讨论和分析。

4、经验和体会(包括对算法改进的设想)

5、附源程序清单和运行结果。源程序要加注释。如果题目规定了测试数据,则运行结果要包含这些测试数据和运行输出,

6、设计报告、程序不得相互抄袭和拷贝;若有雷同,则所有雷同者成绩均为0分。

时间安排:

1、第19周完成。

2、6月21日8:00到计算中心检查程序、交课程设计报告、源程序。

指导教师签名:

系主任(或责任教师)签名:年月日

数据结构课程设计

——按层次遍历二叉树

1问题描述及要求

1.1问题描述

编写按层次顺序(同一层自左至右)遍历二叉树的算法。

1.2任务要求

编写按层次顺序(同一层自左至右)遍历二叉树的算法。

(1)二叉树采用二叉链表作为存储结构。

(2)按题集p44面题6.69所指定的格式输出建立的二叉树。

(3)输出层次遍历结果。

(4)测试用例自己设计。

2开发平台及所使用软件

Windows 7.0 , Visual C++6.0

3程序设计思路

3.1二叉树存储结构设计

typedef char ElemType; //二叉树结点值的类型为字符型

typedef struct BiTNode{ //二叉树的二叉链表存储表示

ElemType date;

struct BiTNode *lchild,*rchild; //左右孩子指针

} BiTNode,*BiTree;

3.2题目算法设计

3.2.1建立二叉树

void CreateBinTree(BinTree &T){ //按先序次序输入,构造二叉链表表示的二叉树T char ch;

ch=getchar(); //输入函数。

if(ch==’’) T=NULL; //输入空格时为空

else{

if(!(T=(BiTNode *)malloc(sizeof(BiTNode)))) printf("%c" "结点建立失败!") ;

T->data=ch;

CreateBinTree(T->lchild);

CreateBinTree(T->rchild);

}

}

3.2.2遍历二叉树

void LevleOrder(BinTree T){ //从第一层开始,从左到右

BinTree Queue[max],p; //用一维数组表示队列,front和rear分别表示队首和队尾指针

int front,rear;

front=rear=0;

if (T) //若树非空

{

Queue[rear++]=T; //根结点入队列

while (front!=rear){ // 队列非空

p=Queue[front++]; // 队首元素出队列,并访问这个结点

printf("%c",p->data);

if (p->lchild!=NULL) Queue[rear++]=p->lchild; //左子树非空,入队列

if (p->rchild!=NULL) Queue[rear++]=p->rchild; }

}

}

3.2.3按要求格式输出已建立的二叉树

void Print_BinTree(BinTree T,int i ) // i表示结点所在层次,初次调用时i=0

{

if(T->rchild) Print_BinTree(T->rchild,i+1); //函数递归

for(j=1;j<=i;j++) printf(" "); //打印i个空格以表示出层次

printf("%c\n",T->data); //打印T元素,换行

if(T->lchild) Print_BiTree(T->lchild,i+1);

}

3.3测试程序

图1:测试二叉树

如图所示二叉树,按先序遍历顺序输入,AB#D##CE#F###。其中”#”代表空格,理论上按层次遍历的结果应该是”CFEADB”,二叉树是:A为根节点,A左孩子是B,右孩子是C,B的左孩子为空,右孩子为D,C的左孩子为E,右孩子为空,E的左孩子为空,右孩子为F。根据以下程序运行结果(见图2)

相关文档
最新文档