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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

桂林理工大学软件综合实习二叉树的建立与遍历何天从.docx

1、桂林理工大学软件综合实习二叉树的建立与遍历何天从软件综合实习报告课题名称 二叉树的建立与遍历 姓 名 何天从 学 号 3110757101 班 级 网络11-1班 院 (系) 信息科学与工程学院 指导教师 陈基漓 王宇 农坚 起止日期 2013.6.32013.6.21 二叉树的建立与遍历1、需求分析1.1二叉树的建立与遍历的功能1.1.1 从键盘接受输入(以字符形式按先序遍历输入),以二叉链表作为存储结构,建立二叉树;【用#表示空子树】1.1.2 对其进行遍历(先序、中序、后序),输出遍历结果; 1.1.3 采用非递归算法实现二叉树遍历;【选作内容,已实现】1.1.4 用函数system(c

2、ls),清空屏幕。【自加内容,已实现】1.2设计思路1.2.1 先定义每个二叉树的节点的属性,由于是链表式的二叉树,所以每个节点都有一个数据域,以及一个指向左孩子的左指针,指向右孩子的右指针。1.2.2以字符形式按先序遍历输入二叉树,并存储二叉树;1.2.3对其进行各种排序,可以用递归排序和非递归排序;1.3设计思路分析二叉树是通过建立一个链式存储结构,达到能够实现前序遍历,中序遍历,后序遍历。以及能够从输入的数据中得知二叉树的叶子节点的个数。所以,每个节点都有一个数据域,以及一个指向左孩子的左指针,指向右孩子的右指针。【实现存储】为了实现存储,定义链表,并以先序遍历方式输入二叉树。 【实现前

3、序遍历】若二叉树非空,则依次执行如下操作:访问根结点、遍历左子树、遍历右子树。【实现中序遍历】 若二叉树非空,则依次执行如下操作:遍历左子树、访问根结点、遍历右子树。【实现后序遍历】若二叉树非空,则依次执行如下操作:遍历左子树、遍历右子树、访问根结点。2、概要设计2.1 为了实现上述程序功能,需要定义链表的抽象数据类型:typedef struct BiTNode char data; /数据 struct BiTNode *lchild,*rchild; /左、右子树指针BiTNode,*BiTree;2.2 本程序包含8个函数:1、int main()【主函数】2、void CreatBi

4、Tree(BiTree &T) 【建立二叉树函数】3、void PreOrderTraverse(BiTree &T)【前序遍历递归】4、void InorderTraverse(BiTree &T)【中序遍历递归】5、void PostTravel(BiTree &T)【后序遍历递归】6、void preOrderTraverse(BiTree T)【前序遍历非递归】7、void inorderTraverse(BiTree T)【中序遍历非递归】8、void postorder (BiTree T)【后序遍历非递归】2.3各函数间关系如下(虚线表示函数之间调用):3、详细设计实现代码:#i

5、nclude #include #include #include /【定义链表的数据结构】typedef struct BiTNode char data; struct BiTNode *lchild,*rchild; BiTNode,*BiTree;/【建立一棵二叉树】 void CreatBiTree(BiTree &T) char ch; cinch; if(ch=#) T=NULL; else T=(BiTree)malloc(sizeof(BiTNode); if(!T) exit(0); T-data=ch; CreatBiTree(T-lchild); CreatBiTree

6、(T-rchild); /【前序遍历递归】void PreOrderTraverse(BiTree &T) if(T) cout datalchild); PreOrderTraverse(T-rchild); /【中序遍历递归】void InorderTraverse(BiTree &T) if(T) InorderTraverse(T-lchild); cout datarchild); /【后序遍历递归】void PostTravel(BiTree &T) if(T) PostTravel(T-lchild); PostTravel(T-rchild); cout data ; /【前序

7、遍历非递归】void preOrderTraverse(BiTree T) BiTree S20; int top=-1; do while(T!= NULL) cout datalchild; if( top -1 ) T=Stop; top-; T = T-rchild; while ( T != NULL ) |(top-1);/【中序遍历非递归】void inorderTraverse(BiTree T) BiTree s20; int i=-1; while(T|i-1) if(T) i+; si=T; T=T-lchild; else T=si; coutdatarchild; /

8、【后序遍历非递归】void postorder (BiTree T) BiTree s120;int s220,top=0;do while (T!=NULL) s1top=T;s2top+=0; T=T-lchild; while(top & s2top-1=1) top-; T=s1top; coutdata0) s2top-1=1; T=s1top-1-rchild; while (top0); /【主函数】 void main() printf( n); printf( n); printf( 年 月 号 n); printf( n); printf( n); printf(n); p

9、rintf( 【作者】n); printf( n); printf( 何天从 n); printf( 网络工程专业 11-1班 n); printf( 学号:3110757101 n); printf( 信息科学与工程学院 n); printf( 桂林理工大学 n); printf( n); printf( n); printf(n); printf(n); printf(【二叉树遍历】 n); printf( n); printf( 输入一棵二叉树(用#表示空): n); printf( 输出先序递归遍历结果 n); printf( 输出中序递归遍历结果 n); printf( 输出后序递归

10、遍历结果 n); printf( 输出先序非递归遍历结果 n); printf( 输出中序非递归遍历结果 n); printf( 输出后序非递归遍历结果 n); printf( 清空屏幕 n); printf( (O)结束遍历 n); printf( n); printf( n); printf(n); BiTree T; int e; while(e!=0) coutendle; coutendl; if(e=1) cout 【请输入】一棵二叉树(用#表示空):; CreatBiTree(T); coutendl; if(e=2) cout 【输出】先序递归遍历结果:; PreOrderTr

11、averse(T); coutendl; if(e=3) cout 【输出】中序递归遍历结果:; InorderTraverse(T); coutendl; if(e=4) cout 【输出】后序递归遍历结果:; PostTravel (T); coutendl; if(e=5) cout 【输出】先序非递归遍历结果:; preOrderTraverse(T); coutendl; if(e=6) cout 【输出】中序非递归遍历结果: ; inorderTraverse(T); if(e=7) cout 【输出】后序非递归遍历结果:; postorder (T); cout8|e0) cou

12、t 【输入有误】请从新输入!; coutendl; 4、调试分析通过二叉树的建立与遍历的编程练习,通过以前的学习以及查看相关资料,对指针、链表等的深入了解,本次实验中,二叉树的先序、中序和后序遍历都采用了递归调用和非递归调用。在编写过程中,遇到的问题不是技术问题,而是二叉树遍历的本质问题,就是如何遍历。二叉树中的递归,最本质的东西是:每个结点都是平等的,即根结点所代表的二叉树,与以任何结点为根的子树具有相同的结构性质,因此,对根结点所代表的二叉树的处理方法与以任何其他结点为根的子树的处理方法一样,且子树的规模比原树还小,从而可以进行递归定义,求解和处理。5、使用说明5.1.程序名为 二叉树的建

13、立与遍历.exe,运行环境为DOS。5.2.程序执行后显示主菜单: 5.2.1主菜单功能选择:选择输入一棵二叉树(用#表示空): 选择输出先序递归遍历结果 选择输出中序递归遍历结果 选择输出后序递归遍历结果 选择输出先序非递归遍历结果 选择输出中序非递归遍历结果 选择输出后序非递归遍历结果 选择清空屏幕 选择(O)结束遍历 6、测试结果 输入一棵二叉树(用#表示空): 输出先序递归遍历结果 输出中序递归遍历结果 输出后序递归遍历结果 输出先序非递归遍历结果 输出中序非递归遍历结果 输出后序非递归遍历结果 清空屏幕 清空屏幕,并返回主菜单。 (O)结束遍历 7、实习心得通过二叉树的建立与遍历的编

14、程,认真回顾和重新思考数据结构的使用,比如对指针、链表等的深入了解,让我感受到了数据结构及其算法的重要。虽然二叉树是数据结构的的基本内容,但是在编程过程中,仍免不了各种错误的出现。我用自己有毅力和耐心,经过不断的努力,最终完成了递归遍历和非递归遍历。在实习这三周里,我遇到了很多的困难,当自己认真思考后还在纠结时,我会跟同学们一起交流,或者向老师请教。在这里衷心地感谢老师和同学们的帮助!2013年6月27日星期四由于上面的原代码编排过,可以编译时出错,下面附没有编排的:#include #include #include #include typedef struct BiTNode char

15、data; struct BiTNode *lchild,*rchild; int LTag, RTag,flag; BiTNode,*BiTree; void CreatBiTree(BiTree &T) /建立一棵二叉树 char ch; cinch; if(ch=#) T=NULL; else T=(BiTree)malloc(sizeof(BiTNode); if(!T) exit(0); T-data=ch; CreatBiTree(T-lchild); CreatBiTree(T-rchild); void PreOrderTraverse(BiTree &T) /前序遍历递归 i

16、f(T) cout datalchild); PreOrderTraverse(T-rchild); void InorderTraverse(BiTree &T) /中序遍历递归 if(T) InorderTraverse(T-lchild); cout datarchild); void PostTravel(BiTree &T) /后序遍历递归 if(T) PostTravel(T-lchild); PostTravel(T-rchild); cout data ; void preOrderTraverse(BiTree T) /前序遍历非递归 BiTree S20; int top=

17、-1; do while(T!= NULL) cout datalchild; if( top -1 ) T=Stop; top-; T = T-rchild; while ( T != NULL ) |(top-1);int inorderTraverse(BiTree T) /中序遍历非递归 BiTree s20; int i=-1; while(T|i-1) if(T) i+; si=T; T=T-lchild; else T=si; coutdatarchild; return 0;void postorder (BiTree T) /后序遍历非递归 BiTree s120; int

18、s220,top=0; do while (T!=NULL) s1top=T; s2top+=0; T=T-lchild; while(top & s2top-1=1) top-; T=s1top; coutdata0) s2top-1=1; T=s1top-1-rchild; while (top0); void main() /主函数 printf( n); printf( n); printf( 年 月 号 n); printf( n); printf( n); printf(n); printf( 【作者】n); printf( n); printf( 何天从 n); printf(

19、网络工程专业 11-1班 n); printf( 学号:3110757101 n); printf( 信息科学与工程学院 n); printf( 桂林理工大学 n); printf( n); printf( n); printf(n); printf(n); printf(【二叉树遍历】 n); printf( n); printf( 输入一棵二叉树(用#表示空): n); printf( 输出先序递归遍历结果 n); printf( 输出中序递归遍历结果 n); printf( 输出后序递归遍历结果 n); printf( 输出先序非递归遍历结果 n); printf( 输出中序非递归遍历结

20、果 n); printf( 输出后序非递归遍历结果 n); printf( 清空屏幕 n); printf( (O)结束遍历 n); printf( n); printf( n); printf(n); BiTree T; int e; while(e!=0) coutendle; coutendl; if(e=1) cout 【请输入】输入一棵二叉树(用#表示空):; CreatBiTree(T); coutendl; if(e=2) cout 【输出】先序递归遍历结果:; PreOrderTraverse(T); coutendl; if(e=3) cout 【输出】中序递归遍历结果:; InorderTraverse(T); coutendl; if(e=4) cout 【输出】后序递归遍历结果:; PostTravel (T); coutendl; if(e=5) cout 【输出】先序非递归遍历结果:; preOrderTraverse(T); coutendl; if(e=6) cout 【输出】中序非递归遍历结果: ; inor

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

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