数据结构 课程设计 排序二叉树

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

学号

数据结构课程设计

设计说明书

排序二叉树的遍历

起止日期:2011 年12月12日至2011 年12月16日

学生姓名

班级

成绩

指导教师(签字)

电子与信息工程系

2011年12月16日

天津城市建设学院

课程设计任务书

2011 —2012 学年第二学期

电子与信息工程系软件工程专业班级

课程设计名称:数据结构课程设计

设计题目:排序二叉树的遍历

完成期限:自2011 年12月12 日至2011 年12月16 日共 1 周

设计依据、要求及主要内容(可另加附页):

一、设计目的

熟悉各种数据结构和运算,会使用数据结构的基本操作解决一些实际问题。

二、设计要求

(1)重视课程设计环节,用严谨、科学和踏实的工作态度对待课程设计的每一项任务;

(2)按照课程设计的题目要求,独立地完成各项任务,严禁抄袭;凡发现抄袭,抄袭者与被抄袭者皆以零分计入本课程设计成绩。凡发现实验报告或源程序雷同,涉及的全部人员皆以零分计入本课程设计成绩;

(3)学生在接受设计任务后,首先要按设计任务书的要求编写设计进程表;

(4)认真编写课程设计报告。

三、设计内容

排序二叉树的遍历(用递归或非递归的方法都可以)

1)问题描述

输入树的各个结点,建立排序二叉树,对建立的排序二叉树进行层次、先序、中序和后序遍历并统计该二叉树中叶子结点的数目。

2)基本要求

(1)用菜单实现

(2)能够输入树的各个结点,并能够输出用不同方法遍历的遍历序列和叶子结点的数目。

四、参考文献

1.王红梅.数据结构.清华大学出版社

2.王红梅.数据结构学习辅导与实验指导.清华大学出版社

3.严蔚敏,吴伟民.数据结构(C语言版).清华大学出版社

指导教师(签字):

教研室主任(签字):

批准日期: 2011 年 12 月 17 日

主要内容:

一、需求分析:

输入树的各个结点,建立排序二叉树,对建立的排序二叉树进行层次、先序、中序和后序遍历并统计该二叉树中叶子结点的数目。

我自己的思想:首先设想把源程序分成头文件,调用和主函数三部分。在头文件中申明类和定义结构体,把先序,中序,后序,层次和叶子节点数的函数定义在类中。然后在调用文件中,把几个函数的实现定义写在里面。最后在主函数中把输出结果以菜单的样式输出来的方式写完主函数程序。实现的过程是先想好自己要输入的是什么,然后通过输入节点制,判断其是否是满足前序遍历,满足则可以实现下后面的功能。

二、问题求解:

现实中的问题:给同学排队问题。

层次是从头开始每一层一层的排,然后分别记号码。

前序是先从最上面的那一个开始往左手边开始排,排之前先计算好人数,然后开始排,排玩左边排右边。

中序是先从最左边开始,然后左斜上角,然后右下角,再左斜上角,直到最上层为止,然后安这个顺序继续排右边的。

后序是先从最左边开始的,左边的一次排过来,然后直接排右边的,也是安依次的顺序,最后才是最上层的。

三、总体设计:

层次:

前序:

中序:

后序:

四、详细设计:

BiSortTree( ); //构造函数,初始化一棵二叉树,其前序序列由键盘输入 BiNode* Getroot(); //获得指向根结点的指针

void PreOrder(BiNode *root); //前序遍历二叉树

void InOrder(BiNode *root); //中序遍历二叉树

void PostOrder(BiNode *root); //后序遍历二叉树

void LeverOrder(BiNode *root); //层序遍历二叉树

void leafnum(BiNode *root); //求二叉树的叶子结点个数

void empty( ); //判断二叉树是否为空

int printnum( ); // 输出(全部、叶子或单分支)结点数

BiNode *root; //指向根结点的头指针

BiNode *Creat( ); //有参构造函数调用

五、调试与测试:

调试方法:在C++程序想调试的地方按F9,然后按F5开始调试。

测试结果与预想的正确。

测试过程中遇到的问题:输入的排序二叉树的输入顺序不对,导致输出结果与预计的不想符。

采取的措施:仔细回想几个遍历的过程,通过调试和查看程序是否错误,最后终于解决了错误的地方。

六、关键源程序清单和执行结果:

注释问题都在程序中。

源程序:

//声明类BiSortTree及定义结构BiNode,文件名为bisorttree.h

#ifndef BITREE_H

#define BITREE_H

int num;

template

struct BiNode //二叉树排序的结点结构

{

T data;

BiNode *lchild, *rchild;

};

template

class BiSortTree

{

public:

BiSortTree( ); //构造函数,初始化一棵二叉排序树,其前序序列由键盘输入

BiNode* Getroot(); //获得指向根结点的指针

void PreOrder(BiNode *root); //前序遍历二叉排序树

void InOrder(BiNode *root); //中序遍历二叉排序树

void PostOrder(BiNode *root); //后序遍历二叉排序树

void LeverOrder(BiNode *root); //层序遍历二叉排序树

void leafnum(BiNode *root); //求二叉排序树的叶子结点个数

void empty( ); //判断二叉排序树是否为空

int printnum( ); // 输出叶子结点数

private:

BiNode *root; //指向根结点的头指针

BiNode *Creat( ); //有参构造函数调用

};

#endif

//定义类中的成员函数,文件名为bisorttree.cpp

#include

相关文档
最新文档