- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《数据结构》课程设计题 目学生姓名指导教师学 院专业班级信息与计算科学一班完成时间2014年01月05日目录第一章 课程设计目的 3
第二章 课程设计内容和要求 3
2.1后序序列以及中序序列的输入 3
2.2 二叉树的建立 3
2.3 运行环境 3
第三章 课程设计分析 3
3.1二叉树的构造 3
第四章 算法(数据结构)描述 4
第五章 源代码 5
第六章 运行结果分析 8
第七章 结束语 10
第八章 参考文献 10第一章 课程设计目的
巩固和加深《数据结构》课程的基本知识,更好的将理论知识与实际相结合;
熟悉并掌握C++语言知识;
掌握二叉树的遍历方法以及编程;
提高编程能力与专业水平;
课程设计内容和要求
2.1后序序列以及中序序列的输入
根据任意一棵二叉树,分别输入其后序遍历(LRV)以及中序遍历(LVR)。
两个遍历都遵循先左后右的法则,后序遍历第三次遇到结点时才访问,中序遍历第二次遇到结点就进行访问。
2.2 二叉树的建立
根据后序遍历的定义,后序序列的最后一个一定是根。又根据中序序列,根将中序序列分为左子树和右子树,递归的对左子树以及右子树进行判断划分就能求出整棵树的结构,则建立起了一棵二叉树。
前序遍历中第一次遇到节点就进行访问。
2.3 运行环境该程序的运行环境为Windows 7系统,Microsoft Visual C++10.0版本。
课程设计分析
3.1二叉树的构造
为方便进行理解,我以一棵二叉树为例,其他二叉树的构造过程类似。
对于以下二叉树,我进行了前序遍历、中序遍历、后序遍历如下:
前序遍历:ABDGEHCFIJ
中序遍历:GDBHEACIFJ
后序遍历:GDHEBIJFCA二叉树(图1)
根据上述给出的遍历,我们将中序以及后序遍历的结果输入,然后头文件中的createBinaryTree函数对中序以及后序进行处理
后序遍历的最后一个字母是A,则A一定是根,又根据中序遍历的定义,从A字母把中序划分为两个子列:(GDBHE)A(CIFJ),这样就可以得到对二叉树的第一次近似,然后取后序序列的倒数第二个字母C,它出现在右子树中,应该是右子树的根,它把中序(CIFJ)又划分为两个子序列:()C(IFJ),这样可以得到对二叉树的第二次近似,将这个过程继续下去就能递归的构造出二叉树。
算法(数据结构)描述
这是一个递归的过程,先在后序序列中找到相应的根,然后根据根将中序遍历分为左子树和右子树。再分别对左子树以及右子树执行与上述过程一致的判断以及划分,最后将整颗树构造出来
//(1-1)createBinaryTree利用后序序列和中序序列构造二叉树
templateclass T
ThreadNodeT* ThreadTreeT::createBinaryTree(T *LRV,T *LVR,int n){
if(n==0)return NULL;
int k=0;
while(LRV[n-1]!=LVR[k])k++;//在中序序列中寻找根
ThreadNodeT*t=new ThreadNodeT(LRV[n-1]);
//创建根结点
t-leftChild=createBinaryTree(LRV,LVR,k);
//从后序的LRV开始,对中序的0到k-1左子序列的k个元素地鬼建立左子树t-rightChild=createBinaryTree(LRV+k,LVR+k+1,n-k-1);
//从后序的LRV+k开始,对中序的k+1到n-1右子序列的n-k-1个元素建立右子树
return t;
};
执行文件如下:
首先进行后序序列以及中序序列的输入,然后构建出二叉树,接着输出前序序列进行验证,看是否程序准确运行。
void main(){
ThreadTreechar BT;
cinBT;//输入后序序列、中序序列、建立二叉树、中序线索化
cout前序序列为;
BT.PreOrder(visit);//前序输出
coutendl;
}第五章 源代码
Erchashu .h头文件:
templateclass T
struct ThreadNode{
int ltag,rtag;//线索标志,非零为线索,ltag前驱,rtag后继
ThreadNodeT *leftChild,*rightChild;
T data;
ThreadNode(const T item):data(item),leftChild(NULL),
rightChild(NULL),ltag(0),rtag(0){}
};
templateclass T
class ThreadTree{
protected:
ThreadNodeT *
您可能关注的文档
- 《数据库课程设计-学生选课系统》.doc
- 《数据库课程设计任务书超市管理系统》.doc
- 《数据库课程设计报告-列车票务管理系统》.doc
- 《数据库课程设计报告-图书管理系统开发》.doc
- 《数据库课程设计报告-图书销售系统设计》.doc
- 《数据库课程设计实验报告-银行账户管理系统》.doc
- 《数据库课程设计报告-学生成绩管理系统》.doc
- 《数据库课程设计报告-图书管理系统》.doc
- 《数据库课程设计报告-学生信息管理系统》.doc
- 《数据库课程设计报告-学校教材订购系统》.doc
- CNAS-CL63-2017 司法鉴定-法庭科学机构能力认可准则在声像资料鉴定领域的应用说明.docx
- 12J7-3 河北《内装修-吊顶》.docx
- 12N2 河北省12系列建筑标准设计图集 燃气(油)供热锅炉房工程.docx
- 内蒙古 12S8 排水工程 DBJ03-22-2014.docx
- 山西省 12S10 12系列建筑标准设计 管道支架、吊架.docx
- 16J601-木门窗标准图集.docx
- 12J8 河北省12系列《 楼梯》.docx
- CNAS-GL37 2015 校准和测量能力(CMC)表示指南.docx
- CNAS-RL02-2016 能力验证规则.docx
- 津02SJ601 PVC塑料门窗标准.docx
文档评论(0)