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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

本文(数据结构树的遍历算法课程设计实验报告.doc)为本站会员(精品资料)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

数据结构树的遍历算法课程设计实验报告.doc

1、重庆交通大学信息科学与工程学院综合性设计性实验报告班 级: 物联网 1501班 姓名 学号: 李怿欣 631507030101 实验项目名称: 树的遍历算法 实验项目性质: 综 合 性 实验所属课程: 算法与数据结构 实验室(中心): 语音楼 801信息实验室 指 导 教 师 : 盛明兰 实验完成时间: 2017 年 11 月 23 日一、 问题描述本实验要求对二叉树进行对每一个结点进行访问。树的遍历是树的一种重要的运算。所谓遍历是指对树中所有结点的信息的访问,即依次对树中每个结点访问一次且仅访问一次。二叉树的 3 种最重要的遍历方式分别称为前序遍历、中序遍历和后序遍历。以这 3 种方式遍历一

2、棵树时,若按访问结点的先后次序将结点排列起来,就可分别得到树中所有结点的前序列表,中序列表和后序列表。相应的结点次序分别称为结点的前序、中序和后序。二、 基本要求建立一棵二叉树,编写程序,对二叉树进行前、中、后序和层次进行遍历,给出算法,并打印结果,本程序用 VC6.0 编写,实现建立一棵二叉树的功能输入二叉树数据1 输入形式和输入值的范围:输入数据格式不限,具体定义为为 char 字符格式输入,并以嵌套表示法输入,以#字符结尾。2 输出的形式:输出二叉树的前序、中序、后序以及层次遍历结果。3 程序所能达到的功能:a) 输入二叉树的先序序列构造相应的二叉树;教师评阅意见:签名: 年 月 日实验

3、成绩:b) 前序递归遍历二叉树,输出得到的节点序列;c) 中序递归遍历二叉树,输出得到的节点序列;d) 后序递归遍历二叉树,输出得到的节点序列;e) 前序非递归遍历二叉树,输出得到的节点序列;f) 中序非递归遍历二叉树,输出得到的节点序列;g) 后序非递归遍历二叉树,输出得到的节点序列h) 层次遍历二叉树,输出得到的节点序列三、 测试数据本实验采用本人学号 631507030101 进行数据测试具体二叉树结构如下:在建立时以 createbtree(bt,“6(3(5(3(,0),0(,0),1(7(,1(1),0)#“)方法建立。761010305301四、 算法思想1) 建立二叉树结构建立

4、二叉树时要明确建立的树的结构,本实验以嵌套表示法进行建树,二叉树用链表存储来实现,因此要先定义一个二叉树链表存储结构。因此要先定义一个结构体。此结构体的每个结点都是由数据域 data、左指针域 Lchild、右指针域 Rchild 两个指针域分别指向该结点的左、右孩子,若某结点没有左孩子或者右孩子时,对应的指域就为空。最后,还需要一个链表的头指针指向根结点。第一步的时候一定要先定义一个结束标志符号,例如空格键、#等。当它遇到该标志时, 就指向为空。建立左右子树时,仍然是调用 createbtree ()函数,依此递归进行下去,直到遇到结束标志时停止操作。2) 输入二叉树元素输入二叉树时,是按上

5、面所确定的遍历规则输入的。最后,用一个返回值来表示所需要的。3) 先序遍历二叉树当二叉树为非空时,执行以下三个操作:访问根结点、遍历左子树、遍历右子树。4) 中序遍历二叉树当二叉树为非空时,程序执行以下三个操作:遍历左子树、访问根结点、遍历右子树。5) 后序遍历二叉树当二叉树为非空时,程序执行以下三个操作:遍历左子树、遍历右子树、访问根结点。6) 层次遍历二叉树当二叉树为非空时,程序执行以下三个操作:从根结点依次从上至下从左至右进行遍历。7) 主程序需列出各个函数,然后进行函数调用。五、 数据结构本实验数据以本人学号(631507030101)以 char 形式进行存储。六、 源程序#incl

6、ude#define maxsize 100typedef char elemtype;typedef struct binode/定义二叉树结点结构体,一装 data 域,两个指向左右孩子指针;elemtype data;binode *lchild,*rchild;bitree; void createbtree(bitree *bt=NULL;int top=-1,k,j=0;char ch;ch=strj;while(ch!=#) /判断是否是结尾;switch(ch) case (:top+;stacktop=p;/建立一个堆栈存储数据;k=1;break;case ):top-;b

7、reak;case ,:k=2;break;default:p=new binode;p-data=ch;p-lchild=p-rchild=NULL;/判断叶节点;if(bt=NULL)bt=p;elseswitch(k)case 1: stacktop-lchild=p;break;case 2: stacktop-rchild=p;break; j+;ch=strj;void printree(bitree *boot) /打印二叉树函数,传入二叉树根节点指针;bitree *b=boot;if(b!=NULL) coutdata;if(b-lchild!=NULL)|(b-rchild

8、!=NULL)/如果结点左右孩子非空;coutlchild);/指针指向左孩子;if (b-rchild!=NULL) coutrchild); /指针指向右孩子;coutdatalchild); Predigui(b-rchild); void Middigui(bitree *b) /递归中序遍历 if(b=NULL) return ; Middigui(b-lchild); coutdatarchild); void Lastdigui(bitree *b) /递归后序遍历 if(b=NULL) return ; Lastdigui(b-lchild); Lastdigui(b-rchi

9、ld); coutdatadatalchild; /指针指向左孩子;if(top!=-1) bt=stop-;bt=bt-rchild; /指针指向右孩子;void midtree(bitree *boot) /中序遍历函数,传入二叉树根节点指针;int top=-1;bitree *smaxsize,*bt=boot;while(bt!=NULL)|(top!=-1) while(bt!=NULL) s+top=bt;bt=bt-lchild; /指针指向左孩子;if(top-1) bt=stop-;coutdatarchild; /指针指向右孩子;void backtree(bitree

10、*boot) /后序遍历函数,传入二叉树根节点指针bitree *smaxsize,*pre=NULL,*bt=boot;int top=-1;while(bt!=NULL)|(top!=-1) /如果根节点非空或堆栈非空;while(bt!=NULL) s+top=bt;/存入堆栈,栈顶指针+;bt=bt-lchild; /指针指向左孩子;if(top-1) bt=stop;if(bt-rchild!=NULL /指针指向右孩子;elsecoutdatadatalchild!=NULL) srear=bt-lchild; /指针指向左孩子,把数据存入 a;rear=(rear+1)%maxs

11、ize;/循环队列尾指针加一;if(bt-rchild!=NULL) srear=bt-rchild; /指针指向右孩子,数据存入 a;rear=(rear+1)%maxsize; /循环队列尾指针加一;void main()/主函数bitree *bt;/定义一个二叉树根节点指针createbtree(bt,“6(3(5(3(,0),0(,0),1(7(,1(1),0)#“);/以学号为数据建树cout“嵌套表示法“endl; printree(bt);coutendl; cout“递归:“endl; cout“前序遍历:“;Predigui(bt);coutendl;cout“中序遍历:“

12、;Middigui(bt);coutendl;cout“后序遍历:“;Lastdigui(bt);coutendl;cout“非递归:“endl;cout“前序:“endl;pretree(bt);/前序打印二叉树coutendl;cout“中序:“endl;midtree(bt); /中序打印二叉树coutendl; cout“后序:“endl;backtree(bt); /后序打印二叉树coutendl; cout“层次:“endl;leveltree(bt); /层次打印二叉树coutendl; 七、 设计感想通过这次实验使我对二叉树的两种遍历格式和三种遍历方法有了进一步的了解,熟悉了二叉树的基本操作,掌握了二叉树的实现以及实际的应用,加深了对二叉树的理解,逐步培养解决实际问题的编程能力和如何使用递归方法和,使我跟深刻的认识到了二叉树的遍历,所谓二叉树的遍历,是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问。访问结点所做的操作依赖于具体的应用问 题。 遍历是二叉树上最重要的运算之一,是二叉树上进行其它运算之基础,同时知道了如果知道了一棵树的先序遍历和中序遍历或者同时知道后序遍历和中序遍历,就能确定一棵二叉树,

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报