ImageVerifierCode 换一换
格式:DOCX , 页数:12 ,大小:31.85KB ,
资源ID:1004270      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/1004270.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(唯一的确定一棵二叉树.docx)为本站会员(b****0)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

唯一的确定一棵二叉树.docx

1、唯一的确定一棵二叉树数据结构课程设计 唯一的确定一棵二叉树 指导教师: 设计人: 班级: 学号: 设计时间:2011年4月18实习二 树、图及其应用题目:唯一的确定一棵二叉树 实习时间:2011.4.15一、需求分析:1. 如果给出了遍历二叉树的前序序列和中序序列,则可以构造出唯一的一棵二叉树。试编写实现上述功能的程序。已知一棵二叉树的前序和中序序列,设计完成下列任务的一个算法:(1)构造一棵二叉树;(2)证明构造正确(即分别以前序和中序遍历该树,将得到的结果与给出的序列进行比较)。2.测试数据:前序序列为ABDEGCFHIJ,中序序列为DBGEAHFIJC。二、设计: 设计思想(1)存储结构

2、:二叉树 ,用两个一维数组A和B分别存放前序和中序序列。(2)主要算法基本思想:将前序和中序序列分别读入数组A和B。根据定义,前序序列中第一个元素一定是树根,在中序序列中该元素之前的所有元素一定在左子树中,其余元素则在右子树中。所以,首先从数组A中取出第一个元素A0作根结点,然后在数组B中找到A0,以它为界,在其前面的是左子树中序序列,在其后面的是右子树中序序列。若左子树不为空,沿前序序列向后移动,找到左子树根结点,转。左子树构造完毕后,若右子树不为空,沿前序序列向后移动,找到右子树根结点,转。前序序列中各元素取完则二叉树构造完毕。对二叉树进行前序和中序遍历,并将结果分别与数组A和B进行比较,

3、若相同,则证明二叉树构造正确。 设计表示(1)函数调用关系图:main Initiate CreateTreePrintBiTreePreOrder VisitInOrder VisitPostOrder(2)函数接口规格说明:void Initiate(BiTNode *root)/初始化二叉树的头结点void Visit(char item)/访问操作void PreOrder(BiTNode *T,void Visit(char item)/前序遍历二叉树void InOrder(BiTNode *T,void Visit(char item)/中序遍历二叉树void PostOrder

4、(BiTNode *T,void Visit(char item)/后序遍历二叉树void PrintBiTree(BiTNode *T,int n)/显示二叉树void CreateTree(BiTNode *T,int pre_f,int pre_l,int in_f,int in_l,char pre,char in)/按要求创建二叉树 实现注释 (1)根据前序遍历和后序遍历创建二叉树,并后序遍历该二叉树。(2)二叉树逆转90度来显示。 详细设计 总体来说,本程序设计相对比较简单,主要包括七个功能模块:初始化函数、前序遍历二叉树函数、中序遍历二叉树函数、后序遍历二叉树函数、显示函数、创建

5、二叉树函数、 主函数。下面分别给予介绍: 初始化函数void Initiate(BiTNode *root)*root=(BiTNode *)malloc(sizeof(BiTNode);(*root)-LeftChild=NULL;(*root)-RightChild=NULL; 前序遍历二叉树函数void PreOrder(BiTNode *T,void Visit(char item)if(T!=NULL) Visit(T-data); PreOrder(T-LeftChild,Visit); PreOrder(T-RightChild,Visit); 中序遍历二叉树函数void InO

6、rder(BiTNode *T,void Visit(char item)if(T!=NULL) InOrder(T-LeftChild,Visit); Visit(T-data); InOrder(T-RightChild,Visit); 后序遍历二叉树函数void PostOrder(BiTNode *T,void Visit(char item)if(T!=NULL) PostOrder(T-LeftChild,Visit); PostOrder(T-RightChild,Visit); Visit(T-data); 显示函数void PrintBiTree(BiTNode *T,int

7、 n)int i;if(T=NULL) return;PrintBiTree(T-RightChild,n+1);for(i=0;i=0) printf(_); printf(%cnn,T-data);PrintBiTree(T-LeftChild,n+1); 创建二叉树函数void CreateTree(BiTNode *T,int pre_f,int pre_l,int in_f,int in_l,char pre,char in)int interval=0;/int same=in_f;if(prepre_f!=insame) while(prepre_f!=insame)/在中序序列

8、中找到根节点 same+; interval+; if(interval=0)&(pre_f=pre_l) /找到了叶节点,也是递归出口 T-data=prepre_f; T-LeftChild=NULL; T-RightChild=NULL;if(interval!=0)&(intervalLeftChild=(BiTNode *)malloc(sizeof(BiTNode); T-RightChild=(BiTNode *)malloc(sizeof(BiTNode); T-data=prepre_f; CreateTree(T-LeftChild,pre_f+1,pre_f+interv

9、al,in_f,in_f+interval-1,pre,in); CreateTree(T-RightChild,pre_f+interval+1,pre_l,in_f+interval+1,in_l,pre,in);if(interval!=0)&(interval=pre_l-pre_f)/只有左子树 T-LeftChild=(BiTNode *)malloc(sizeof(BiTNode); T-data=prepre_f; CreateTree(T-LeftChild,pre_f+1,pre_l,in_f,in_f+interval-1,pre,in); T-RightChild=NU

10、LL;if(interval=0)&(pre_f!=pre_l)/只有右子树 T-RightChild=(BiTNode *)malloc(sizeof(BiTNode); T-data=prepre_f; T-LeftChild=NULL; CreateTree(T-RightChild,pre_f+interval+1,pre_l,in_f+interval+1,in_l,pre,in); 主函数void main()BiTNode *T;int Pre_len,In_len;char PreMaxSize;/前序序列char InMaxSize;/中序序列printf(请输入前序序列:n

11、);scanf(%s,&Pre);Pre_len=strlen(Pre);printf(请输入中序序列:n);scanf(%s,&In);In_len=strlen(In);Initiate(&T);CreateTree(T,0,Pre_len-1,0,In_len-1,Pre,In);printf(二叉树构造成功!n);printf(逆时针旋转90度的二叉树如下所示:n);PrintBiTree(T,0);printf(前序序列:n);PreOrder(T,Visit);printf(n中序序列:n);InOrder(T,Visit);printf(n后序序列:n);PostOrder(T,

12、Visit);printf(n);三、调试分析:本程序在设计过程中遇到一个难题,那就是如何正确显示所构造的二叉树,试了几种方法都不理想,最后想到让二叉树逆时针旋转后再显示,具备可行性,同时也使之更美观。经验和体会经过第一次一元稀疏多项式加法的课程设计,这次课程设计就显得轻车熟路了,运算的主要设计思路很容易想到,大体设计结构在较短时间能够完成,但当设计到具体细节代码时遇到了一些困难,主要困难是进行结点操作时,对指针考虑得不够细致,调试时常出现指针指错的情况,没有认真理清条件层次,另一个困难是如何正确显示所构造的二叉树。虽然程序可能并不是最高效的,而且不够健壮,但也符合题目的要求,总的来说本次课程

13、设计还算圆满。本次课程设计培养了我对实际问题的分析能力以及解决一些实际问题的能力,巩固了我的编程思想和写程序的能力。课程设计是对我们的学习很有利的一个环节,在这个阶段,我们学会把理论与实际的结合、懂得人与人沟通的重要性,通过这次课程设计中,我加深了对课本知识的理解。四、用户手册:本程序在Visual C + 6.0下运行。先输入前序遍历序列,回车,再输入中序遍历序列,再回车,即可得出结果。五、运行结果: 六、源程序清单:#include #include #include #define MaxSize 50typedef struct Nodechar data;struct Node *L

14、eftChild;struct Node *RightChild;BiTNode;void Initiate(BiTNode *root)*root=(BiTNode *)malloc(sizeof(BiTNode);(*root)-LeftChild=NULL;(*root)-RightChild=NULL;void Visit(char item)printf(%c,item);void PreOrder(BiTNode *T,void Visit(char item)if(T!=NULL) Visit(T-data); PreOrder(T-LeftChild,Visit); PreOrder(T-RightChild,Visit);void InOrde

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1