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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构实验报告树.docx

1、数据结构实验报告树数据结构实验报告实验名称:实验三树学生姓名:*班 级:2010211119班内序号:07学 号:*日 期:2011年11月27号1 实验目的通过选择下面五个题目之一进行实现,掌握如下内容:进一步掌握指针、模板类、异常处理的使用掌握栈的操作的实现方法掌握队列的操作的实现方法学习使用栈解决实际问题的能力学习使用队列解决实际问题的能力2.实验内容根据二叉树的抽象数据类型的定义,使用二叉链表实现一个二叉树。 二叉树的基本功能:1、二叉树的建立2、前序遍历二叉树3、中序遍历二叉树4、后序遍历二叉树5、按层序遍历二叉树6、求二叉树的深度7、求指定结点到根的路径8、二叉树的销毁9、其他:自

2、定义操作编写测试main()函数测试线性表的正确性3.存储结构:采用的是栈的存储结构4.程序的分析和代码重现源程序#includeusing namespace std;template struct Binode T data; Binode *lch; Binode *rch;templateclass Bitree private: void create(Binode*&R,T data,int i); void Destroy(Binode *R); public: Binode*root; Bitree(T data); Bitree(); void preorder(Binode

3、*R); void Inorder(Binode*R); void Postorder(Binode*R); void Levelorder(Binode*R); /*void find(T data);*/ int Depth(Binode *R,int d); void path(Binode* root,char); Bitree();templatevoid Bitree:create(Binode*&R,T data,int i) if(datai-1!=0) R=new Binode; R-data=datai-1; R-lch=R-rch=NULL; create(R-lch,d

4、ata,2*i); create(R-rch,data,2*i+1); /*templatevoid Bitree:find(T data)*/template Bitree:Bitree(T data) create(root,data,1);template void Bitree:preorder(Binode*R) if(R!=NULL) coutdata; preorder(R-lch); preorder(R-rch); template void Bitree:Inorder(Binode*R) if(R!=NULL) Inorder(R-lch); coutdata; Inor

5、der(R-rch); template void Bitree:Postorder(Binode*R) if(R!=NULL) Postorder(R-lch); Postorder(R-rch); coutdata; templatevoid Bitree:Levelorder(Binode*R) Binode* queue10000; int f=0,r=0; if(R!=NULL) queue+r=R; while(f!=r) Binode*p=queue+f; coutdata; if(p-lch!=NULL) queue+r=p-lch; if(p-rch!=NULL) queue

6、+r=p-rch; /销毁二叉树template void Bitree:Destroy(Binode *R) if (R!=NULL) Destroy(R-lch); Destroy(R-rch); delete R; template Bitree:Bitree() Destroy(root);template int Bitree:Depth(Binode *R,int d) if (R=NULL) return d; if (R-lch=NULL) & (R-rch=NULL) return d+1; else int m = Depth(R-lch,d+1); int n = Dep

7、th(R-rch,d+1); return nm? n:m; templatevoid Bitree:path(Binode* root,char m)/求路径 Binode* stack10000; Binode*s; int tag10000; int top=0; s=root; do while(s!=NULL) top+; stacktop=s; tagtop=0; s=s-lch; if(top 0) if(tagtop=1) if(stacktop-data=m) cout 路径: ; for(int i=1;i =top;i+) coutdata; break; top-; e

8、lse s=stacktop; if(top 0) s=s-rch; tagtop=1; while(s!=NULL|top!=0); void main() char buf400=0; for(int i = 0;i5;i+) bufi = i+65; Bitree ChBiTree(buf); cout前序遍历是endl; ChBiTree.preorder(ChBiTree.root); coutendl; cout中序遍历是endl; ChBiTree.Inorder(ChBiTree.root); coutendl; cout后序遍历是endl; ChBiTree.Postorde

9、r(ChBiTree.root); coutendl; cout层序遍历是endl; ChBiTree.Levelorder(ChBiTree.root); coutendl; cout此二叉树的深度是ChBiTree.Depth(ChBiTree.root,0)endl; ChBiTree.path(ChBiTree.root,buf4); 整个程序采用的是递归的方法,其中层序遍历的函数采用的是列的存储结构。 算法设计:首先建立一个二叉树,每一个节点都必须包含他本身的数值,他的左孩子和有孩子,所以用一个结构体来存储每个节点的属性,之后用一个类类实现对于二叉树的各种操作。类的创建:templa

10、teclass Bitree private: void create(Binode*&R,T data,int i);/创建二叉树 void Destroy(Binode *R);/销毁二叉树 public: Binode*root;/根节点 Bitree(T data);/构造函数 Bitree(); void preorder(Binode*R);/前序遍历 void Inorder(Binode*R);/中序遍历 void Postorder(Binode*R);/后续遍历 void Levelorder(Binode*R);/层序遍历 int Depth(Binode *R,int

11、d);/求树的深度 void path(Binode* root,char);/求指定路径 Bitree();/析构函数;前序遍历:template void Bitree:preorder(Binode*R) if(R!=NULL) coutdata; preorder(R-lch); preorder(R-rch); 后续遍历:template void Bitree:Postorder(Binode*R) if(R!=NULL) Postorder(R-lch); Postorder(R-rch); coutdata; 中序遍历:template void Bitree:Inorder(

12、Binode*R) if(R!=NULL) Inorder(R-lch); coutdata; Inorder(R-rch); 二叉树的创建:templatevoid Bitree:create(Binode*&R,T data,int i) if(datai-1!=0) R=new Binode; R-data=datai-1; R-lch=R-rch=NULL; create(R-lch,data,2*i); create(R-rch,data,2*i+1); 求二叉树的深度:template int Bitree:Depth(Binode *R,int d) if (R=NULL) re

13、turn d; if (R-lch=NULL) & (R-rch=NULL) return d+1; else int m = Depth(R-lch,d+1); int n = Depth(R-rch,d+1); return nm? n:m; 二叉树的销毁:template void Bitree:Destroy(Binode *R) if (R!=NULL) Destroy(R-lch); Destroy(R-rch); delete R; template Bitree:Bitree() Destroy(root);求根节点到指定节点的路径:templatevoid Bitree:pa

14、th(Binode* root,char m)/求路径 Binode* stack10000; Binode*s; int tag10000; int top=0; s=root; do while(s!=NULL) top+; stacktop=s; tagtop=0; s=s-lch; if(top 0) if(tagtop=1) if(stacktop-data=m) cout 路径: ; for(int i=1;i =top;i+) coutdata; break; top-; else s=stacktop; if(top 0) s=s-rch; tagtop=1; while(s!=NULL|top!=0); 运行结果测试:1.函数流程:5.感想:这次程序的难点是求指定节点的路径,我采用的是遍历二叉树的方法,把整个二叉树都遍历一遍,并采用的是栈的存储方式,直到找到要求的那个节点,就把整个路径打印出来,最主要的实现方法是那两个循环结构,在代码重现里已经写清楚了,还有这次充分体现了递归函数的巨大作用。

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2