版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、数据结构课程设计报告专 业 计算机科学与技术 班 级 3班 姓 名 学 号 指导教师 起止时间 2012.122013.1 课程设计:二叉树一、任务描述 二叉树的中序、前序、后序的递归、非递归遍历算法,应包含建树的实现。任务:设计一个程序,实现二叉树的前序、中序、后序的递归遍历运算。要求: (1)创建二叉树;(2)二叉树的前序、中序、后序的递归遍历运算实现。二、问题分析1、功能分析 分析设计课题的要求,要求编程实现以下功能:(1) 二叉树的建立即创建二叉树;(2) 二叉树的遍历二叉树的前序、中序、后序操作;2、数据对象分析 二叉树的遍历:包括前序、中序、后序将二叉树补充到完全二叉树在输入,才能
2、正确创建二叉树三、数据结构设计二叉树的建立和遍历的实现。有关的定义如下:typedef int Status;typedef char TElemType; /定义二叉树结点值的类型为字符型struct BiTNode /定义二叉树结点类型栈结点的类型TElemType data; /数据域 BiTNode *lchild,*rchild;/指针域;BiTNode *BiTree;四、功能设计(一)主控菜单设计程序运行后,输入提示,如下:“创建二叉树,请按前序序列输入各节点值:”正确输入二叉树后,提示“已成功创建二叉树”(二)程序模块结构由课题要求可将程序划分为以下几个模块(即实现程序功能所需
3、的函数):l 创建二叉树的函数void CreateBiTree(BiTree &T);l 二叉树的前序遍历函数 Status PreOrderTraverse(BiTree T,Status(*Visit)(TElemType); l 二叉树的中序遍历函数Status InOrderTraverse(BiTree T,Status(*Visit)(TElemType);l 二叉树的后序遍历函数Status PostOrderTraverse(BiTree T,Status(*Visit)(TElemType);l 最简单的visit函数Status Visit(TElemType e);(三
4、)函数调用关系程序的主要结构(函数调用关系)如下图所示。 Main()Visit()CreateBiTree() PreOrderTraverse() InOrderTraverse() PostOrderTraverse()其中main()是主函数,它进行菜单驱动。BiTree T;int n=0;printf(创建二叉树,请按前序序列输入各节点值:n);CreateBiTree(T);printf(n); printf(已成功创建二叉树n);PreOrderTraverse( T,Visit);printf(n);InOrderTraverse(T,Visit);printf(n);Pos
5、tOrderTraverse(T,Visit);printf(n);(四)文件结构1、tree.h:二叉树相关的定义与声明2、tree.cpp:二叉树运算的实现5、mn.cpp:主函数 (五)各函数的算法设计1、CreateBiTree()算法原理:按先序次序输入二叉树中结点的值(一个字符),空格字符表示空树,构造二叉链表流程图: 输入一个字符 申请内存是否成功 生成根结点退出程序 构造左子树 构造右子树代码描述:void CreateBiTree(BiTree &T)char ch; ch=getchar(); /读入一个字符 printf(%c,ch); if (ch= ) T=NULL;
6、 else if (!(T=(BiTNode *)malloc(sizeof(BiTNode) exit(OVERFLOW); /内存分配成功 T-data = ch; /生成根结点 CreateBiTree(T-lchild); CreateBiTree(T-rchild); 算法的时间复杂度分析:O(1)2、PreOrderTraverse ()算法原理:若二叉树为空,则空操作;否则(1)访问根结点;(2)先序遍历左子树(3)先序遍历右子树流程图:流程图 存在一个二叉树 是否为空树 访问根结点退出程序 先序遍历左子树 先序遍历右子树代码描述:Status PreOrderTraverse
7、(BiTree T,Status (*visit)(TElemType e) /*功能:先序遍历二叉树;参数:T为二叉树的根,visit为对结点的处理方法*/ if (T) /若根结点不空 if(visit(T-data) /访问根结点 if (PreOrderTraverse(T-lchild,visit) /先序遍历根的左子树 if(PreOrderTraverse(T-rchild,visit) /先序遍历根的右子树 return OK; 算法的时间复杂度分析:O(n)3、InOrderTraverse ()算法原理:若二叉树为空,则空操作;否则(1)中序遍历左子树;(2)访问根结点;(
8、3)中序遍历右子树;流程图: 存在一个二叉树 是否为空树中序遍历左子树退出程序 访问根节点 中序遍历右子树代码描述:Status InOrderTraverse (BiTree T,Status (*visit)(TElemType e) /*功能:中序遍历二叉树;参数:T为二叉树的根,visit为对结点的处理方法*/ if (T) /若根结点不空 if (InOrderTraverse(T-lchild,visit) /中序遍历根结点的左子树 if(visit(T-data) /访问根结点 if(InOrderTraverse(T-rchild,visit) /中序遍历根结点的右子树 ret
9、urn OK; 算法的时间复杂度分析:O(n)4、PostOrderTraverse()算法原理:若二叉树为空,则空操作;否则(1)后序遍历左子树;(2)后序遍历右子树;(3)访问根结点流程图: 存在一个二叉树 是否为空树后序遍历左子树退出程序 后序遍历右子树 访问根节点代码描述:Status PostOrderTraverse (BiTree T,Status (*visit)(TElemType e) /*功能:后序遍历二叉树;参数:T为二叉树的根,visit为对结点的处理方法*/ if (T) /若根结点不空 if (PostOrderTraverse(T-lchild,visit) /后序遍历根结点的左子树 if(PostOrderTraverse(T-rchild,visit) /后序遍历根结点的右子树 if(visit(T-data) /访问根结点 return OK; 算法的时间复杂度分析
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026春八年级下册《道德与法治》新教材习题参考答案
- 脑卒中的早期识别与处理培训
- 湖南省湘西州2025-2026学年七年级上学期期末考试历史试卷(解析版)
- 模特发展趋势强化考核试卷含答案
- 硝酸生产工持续改进模拟考核试卷含答案
- 初中七年级数学上册期末复习:一元一次方程的应用(13种常见题型专练)
- 2026年春季学期校园食品安全专项整治行动方案
- 2025 八年级地理下册北京文化产业政策解读课件
- 2026年中考历史总复习试题汇编:古代亚非文明和欧洲文明(解析版)
- 2026年天津公安警官职业学院单招职业倾向性测试题库带答案详解(满分必刷)
- 2026 年三八妇女节 普法宣传方案 课件
- 【新教材】人教PEP版(2024)四年级下册英语 Unit 1 Class rules A Lets talk 教案
- 第一单元 考虑目的和对象(课件)语文新教材统编版八年级下册
- 2026年非煤矿山三级安全教育培训考核试题(及答案)
- 2026年春季小学科学人教鄂教版(2024)二年级下册教学计划含进度表
- 2026年包头职业技术学院单招职业技能测试题库附答案详解(考试直接用)
- 2026海南三亚市吉阳区机关事业单位编外聘用人员、村(社区)工作人员储备库(考核)招聘200人(第1号)考试备考试题及答案解析
- 2026年乌兰察布职业学院单招综合素质考试题库及答案详解(各地真题)
- 2025年江西工业贸易职业技术学院单招职业技能考试题库带答案解析
- 2026年春季小学信息科技(清华版·贵州)四年级下册教学计划及进度表
- 2025-2026学年下学期初三春季开学第一课
评论
0/150
提交评论