数据结构课程实施方案(二叉树)_第1页
数据结构课程实施方案(二叉树)_第2页
数据结构课程实施方案(二叉树)_第3页
数据结构课程实施方案(二叉树)_第4页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、个人收集整理仅供参考学习中南民族大学数据结构课程设计报告姓名:康宇年级:2010学号:10061014专业:计算机科学与技术指导老师:宋中山2013年4月 15日1/12个人收集整理仅供参考学习实习报告:二叉树实习报告题目:设计一个能实现二叉树相关功能地程序班级:计科一班姓名:康宇学号:10061014 完成日期: 2013.4.15一、 需求分析1、二叉树分析:遍历二叉树是二叉树各种操作地基础. 实现二叉树遍历地具体算法与所采用地存储结构有关. 不仅要熟练掌握各种遍历策略地递归和非递归算法,了解遍历过程中“栈”地作用和状态,而且能灵活运用遍历算法实现二叉树地其他操作. 理解前序序列和中序序列

2、可唯一确定一颗二叉树地道理,理解具有相同地前序序列而中序序列不同地二叉树数目与序列12n 按不同顺序进栈和出栈所能得到地排列地数目相等地道理,掌握有前序序列和中序序列建立二叉树地存储结构地方法. b5E2RGbCAP2、测试数据:选择实现方式:由先序和中序或中序和后序得唯一二叉树并打印输出.1) 先序: EBADCFHGIKJ 中序: ABCDEFGHIJK2) 中序: DCBGEAHFIJK 后序 : DCEGBFHKJIA3、实现提示:用结构体来存储二叉树结点struct BiTNode,包含数据域double data和左右孩子指针structBiTNode *lchild,*rchil

3、d;利用递归算法来先序遍历,中序遍历以及后续遍历来实现唯一二叉树地确定. p1EanqFDPw二、 概要设计1. 元素类型 ( 链表) :typedef struct BiTNode/结点类型char data;/数据域int s;/节点深度struct BiTNode *lchild, *rchild;/左右孩子指针BiTNode;2. 本程序包括九个模块:2/12个人收集整理仅供参考学习1 )主程序:int main()while(1)输出菜单;switch(n)case 1:先中序确定唯一二叉树并打印输出;break;case 2:中后序确定唯一二叉树并打印输出;break;case 0

4、:exit(1);default:printf(请重新输入! n);2)前中序确定二叉树函数:void Pre_In_Order()/ 定义头结点 *head输入前序序列 ;输入中序序列 ;N=strlen(q);调用验证唯一二叉树函数head=Qzroot(q,z,N);调用深度函数Depth(head);打印二叉树Output(head);3)中后序确定二叉树函数:void Pre_In_Order()/ 定义头结点 *head输入中序序列 ;输入后序序列 ;N=strlen(q);调用验证唯一二叉树函数head=Zhroot(q,z,N);调用深度函数Depth(head);打印二叉树O

5、utput(head);4)前中序确定二叉树实现函数:3/12个人收集整理仅供参考学习BiTNode *Qzroot(char *a,char *b,int l)BiTNode *New;if(树为空 )return NULL;New=(BiTNode *)malloc(LEN);根节点赋值New-data=a0;左右孩子指针分别赋值为空;i=0;while(bi!=a0)i+;p=a+1;q=b;左子树 New-lchild=Qzroot(p,q,i);p=a+i+1;q=b+i+1;右子树 New-rchild=Qzroot(p,q,l-i-1);return New;5) 中后序确定二叉

6、树实现函数:BiTNode *Zhroot(char *a,char *b,int l)BiTNode *New;if(树为空 )return NULL;New=(BiTNode *)malloc(LEN);根结点赋值New-data=bl-1;左右孩子指针分别赋值为空;i=0;while(ai!=bl-1)i+;p=a;q=b;左子树 New-lchild=Zhroot(p,q,i);p=a+i+1;q=b+i;右子树 New-rchild=Zhroot(p,q,l-i-1);return New;6)二叉树后序输出函数void Print_Post(BiTNode *T)if(T)先输出左

7、子树4/12个人收集整理仅供参考学习再输出右子树最后输出根结点7)二叉树先序输出函数void Print_Pre(BiTNode *T)if(T)先输出根结点再输出左子树最后输出右子树8)深度函数void Depth(BiTNode *T)if(结点不空 )根结点深度为dep;dep+;左孩子地深度Depth(T-lchild);右孩子地深度Depth(T-rchild);dep-;9)打印输出函数void Output(BiTNode *T)if(树不空 )输出左子树Output(T-rchild);控制格式输出树状图for(int i=0;is;i+)printf(t);printf(%c

8、n,T-data);输出右子树Output(T-lchild);三、详细设计#include#include#include5/12个人收集整理仅供参考学习#define LEN sizeof(BiTNode)#define NULL 0int dep=0;typedef struct BiTNodechar data;int s;struct BiTNode *lchild, *rchild;BiTNode;BiTNode *Qzroot(char *a,char *b,int l)char *p, *q;int i;BiTNode *New;if(ldata=a0;New-lchild=N

9、ULL;New-rchild=NULL;i=0;while(bi!=a0)i+;p=a+1;q=b;New-lchild=Qzroot(p,q,i);p=a+i+1;q=b+i+1;New-rchild=Qzroot(p,q,l-i-1);return New;BiTNode *Zhroot(char *a,char *b,int l)char *p, *q;int i;BiTNode *New;if(ldata=bl-1;6/12个人收集整理仅供参考学习New-lchild=NULL;New-rchild=NULL;i=0;while(ai!=bl-1)i+;p=a;q=b;New-lchi

10、ld=Zhroot(p,q,i);p=a+i+1;q=b+i;New-rchild=Zhroot(p,q,l-i-1);return New;void Depth(BiTNode *T)if(T)T-s=dep;dep+;Depth(T-lchild);Depth(T-rchild);dep-;void Output(BiTNode *T)if(T)Output(T-rchild);for(int i=0;is;i+)printf(t);printf(%cn,T-data);Output(T-lchild);void Print_Post(BiTNode *T)/输出二叉树地后序序列if(T)

11、Print_Post(T-lchild);/先输出左子树Print_Post(T-rchild);/再输出右子树printf(%c,T-data);/最后输出根结点7/12个人收集整理仅供参考学习void Print_Pre(BiTNode *T)/输出二叉树地先序序列if(T)printf(%c,T-data);/先输出根结点Print_Pre(T-lchild);/再输出左子树Print_Pre(T-rchild);/最后输出右子树void Pre_In_Order()char q30,z30;int N;BiTNode *head;head=(BiTNode *)malloc(LEN);

12、printf(请输入前序序列:);scanf(%s,q);printf(请输入中序序列:);scanf(%s,z);N=strlen(q);head=Qzroot(q,z,N);Depth(head);printf(由前序和中序确定地二叉树为:nn);Output(head);void In_Post_Order()char z30,h30;int N;BiTNode *head;head=(BiTNode *)malloc(LEN);printf(请输入中序序列:);scanf(%s,z);printf(请输入后序序列:);scanf(%s,h);N=strlen(z);head=Zhroo

13、t(z,h,N);Depth(head);8/12个人收集整理仅供参考学习printf(由中序和后序确定地二叉树为:nn);Output(head);int main()while(1)int n;printf(-二叉树-n);DXDiTa9E3dprintf(1.通过前序序列和中序序列建立二叉树并输出后序序列n);printf(2.通过中序序列和后序序列建立二叉树并输出前序序列n);printf(0.退出n);RTCrpUDGiTprintf(-n);5PCzVD7HxAprintf(n请输入您地选择:);scanf(%d,&n);switch(n)case 1:Pre_In_Order()

14、;break;case 2:In_Post_Order();break;case 0:exit(1);default:printf(请重新输入! n);getchar();return 0;四、调试分析1. 本次作业还是有一定地难度地,核心算法在于怎样利用递归生成,遍历二叉树. 还有一个难点就是: 利用二叉树地先序序列和中序序列以及中序序列和后序序列确定唯一地二叉树,确定之后就可以很容易地遍历输出相对应地后序序列和中序序列了. jLBHrnAILg2. 本程序模块简洁,在main() 函数里得到充分体现,前中序函数Pre_In_Order()以及中后序函数In_Post_Order(); xH

15、AQX74J0X9/12个人收集整理仅供参考学习3. 用户可灵活控制二叉树地大小,而且采用树状图形输出二叉树,便于用户观看. 本程序具有一定地普遍性.五、用户手册1. 本程序运行环境为 Windows 操作系统,执行文件为:二叉树.exe2. 进入演示程序后显示地界面:六、测试结果10/12个人收集整理仅供参考学习版权申明本文部分内容,包括文字、图片、以及设计等在网上搜集整理.版权为个人所有This articleincludessome parts,includingtext,pictures,and design. Copyright is personal ownership.LDAYt

16、RyKfE用户可将本文地内容或服务用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途, 但同时应遵守著作权法及其他相关法律地规定,不得侵犯本网站及相关权利人地合法权利. 除此以外,将本文任何内容或服务用于其他用途时,须征得本人及相关权利人地书面11/12个人收集整理仅供参考学习许可,并支付报酬 . Zzz6ZB2LtkUsers may use the contents or services of this article for personal study, research or appreciation, and other non-commercial or non-prof

17、it purposes, but at the same time, they shall abide by the provisions of copyright law and other relevant laws, and shall not infringe upon the legitimaterights of this website and its relevant obligees. In addition, when any content or service of this article is used for other purposes, written permission and remuneration shall be obtained from the person concerned and the relevantobligee.dvzfvkwMI1转载或引用本文内容必须是以新闻性或资料性公共免费信息为使用目地地合理、善意引用,不得对本文内容原意进行曲解、修改,并自负版权等法律责任. rqyn14ZNXIReproduction or quotation of the co

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论