算法与数据结构实验报告二叉树实验报告.doc_第1页
算法与数据结构实验报告二叉树实验报告.doc_第2页
算法与数据结构实验报告二叉树实验报告.doc_第3页
算法与数据结构实验报告二叉树实验报告.doc_第4页
算法与数据结构实验报告二叉树实验报告.doc_第5页
全文预览已结束

下载本文档

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

文档简介

算法与数据结构实验报告二叉树课程名称:算法与数据结构实验项目名称:满二叉树的建立与遍历实验时间:2014年11月29日班级:电科1301姓名:侯炜 学号:1402130126实验目的:熟悉使用线性表结构,设计并理解多项式算法。实验环境:Visual C+6.0,win7实验步骤:1 建立基本数据结构及程序架构2 设计多项式各类操作的算法3 调试程序,修改错误4 总结得失实验结果:成功使用中序输入建立二叉树并进行相应的遍历输出。实验心得: 队列结构作用之一:用于储存“临时数据”以便后续输出 满二叉树是仅仅输入一次遍历顺序就得出结果的先决条件具体实验步骤:1 建立基本数据结构及程序架构1.1数据结构确定所需要的对二叉树进行抽象的数据类型:树节点。建立数据结构如下:/-数据结构typedef struct treenodechar data;struct treenode* ltree;struct treenode* rtree;Tnode;/-1.2主程序架构建立了一个全局变量数组queue用作队列,函数指针fp用以调用操作函数,scree100数组用以储存输入的字符串。主要函数声明如下:/-Tnode* finit(Tnode*tf,int flo);/中序建立void transver(Tnode* tf,int flo,fp kf,int n);/层序遍历 tf为树节点 flo为层数 kf为回调函数 n为标识层数:0为全部遍历 其他n为输出第n层void ordtra(Tnode* tf,fp kf,int flo);/先序遍历void follow(Tnode* tf,fp kf,int flo);/后序遍历Tnode*pus_pop(Tnode*tf,int k);/队列操作函数:k=0时为出队 1为入队int ana(char sz);/分析二叉树层数void visit(Tnode*k);/回调访问函数int ifpopcorn();/判断队列是否为空(未用)void inintque();/初始化队列int flag(int n,int i);/层数显示标记主函数阶段,循环显示主界面:建立多项式、多项式操作以及显示多项式。【输入格式】:建立二叉树:二叉树数据:按中序遍历顺序输入(只支持满二叉树)输出某一层:输入层数,按回车即可。二设计算法2.1 建立二叉树评价: 处理scree存储的中序输入的字符串,实现思想:以中序遍历的方法,递归建立。代码如下:Tnode* finit(Tnode* tf,int flo)/中序建立if(!flo)return NULL;if(*scree=0)return NULL;tf=(Tnode*)malloc(sizeof(Tnode);/为当前节点申请空间tf-ltree=finit(tf-ltree,flo-1);/递归 中序是先左再中后右tf-data=*printc;/赋值 printc为指向scree字符串(输入的中序序列)printc+;/指针后移tf-rtree=finit(tf-rtree,flo-1);/递归return tf;/返回树节点2.2遍历算法评价:利用递归算法遍历。算法思想:递归。实现代码如下:void ordtra(Tnode* tf,fp kf,int flo)/先序遍历/printf(%c,tf-data);if(!tf|!flo)return;kf(tf);/回调函数(其实就是printf())ordtra(tf-ltree,visit,flo-1);ordtra(tf-rtree,visit,flo-1);void follow(Tnode* tf,fp kf,int flo)/后序遍历/printf(%c,tf-data);if(!tf|!flo)return;follow(tf-ltree,visit,flo-1);follow(tf-rtree,visit,flo-1);kf(tf);return ;2.3 层序遍历评价:实现对每一层(或者指定层)进行遍历输出。算法思想:建立一个队列,循环思想如下:在循环前将当头节点入队,进入循环后,先出队一个,输出,同时判断左右子树是否存在,存在则分别入队,进入下一次循环。这样下去,可以把每一层都输出。同时会有一个i变量,用于判断循环边界以及是否输入某层。(形参n为显示层数参数,如果为0则全部输出,此外输出第n层)。void transver(Tnode* tf,int flo,fp kf,int n)int i=0;if(!tf)return NULL;inintque();/初始化队列pus_pop(tf,1);/树头入队while(iltree)pus_pop(tf-ltree,1);/左子树存在的话就入队if(tf-rtree)pus_pop(tf-rtree,1);/右子树存在的话就入队printf(n);int flag(int n,int i)if(n=0)return 1;if(pow(2,n-1)-1)=i)return 1;/在第n层范围内return 0;2.4 其他函数2.4.1 队列的入队和出队函数Tnode*pus_po

温馨提示

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

评论

0/150

提交评论