网站大量收购独家精品文档,联系QQ:2885784924

《数据结构课程设计二叉树的建立》.doc

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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 *

文档评论(0)

lipinting + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档