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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构二叉树的实验报告.docx

1、数据结构二叉树的实验报告 数据结构 实 验 报 告 1. 实验目的和内容:掌握二叉树基本操作的实现方法2. 程序分析2.1存储结构 链式存储2程序流程 2.3关键算法分析算法一:Create(BiNode* &R,T data,int i,int n)【1】 算法功能:创建二叉树【2】 算法基本思想:利用顺序存储结构为输入,采用先建立根结点,再建立左右孩子的方法来递归建立二叉链表的二叉树【3】 算法空间时间复杂度分析:O(n)【4】 代码逻辑: 如果位置小于数组的长度则 创建根结点 将数组的值赋给刚才创建的结点的数据域 创建左子树,如果当前结点位置为i,则左孩子位置为2i 创建右子树,如果当前

2、结点位置为i,则右孩子位置为2i+1 否则R为空 算法二:CopyTree(BiNode*sR,BiNode* &dR))【1】 算法功能:复制构造函数【2】 算法基本思想:按照先创建根结点,再递归创建左右子树的方法来实现。【3】 算法空间时间复杂度分析:O(n)【4】 代码逻辑: 如果源二叉树根结点不为空 则 创建根结点 调用函数自身,创建左子树 调用函数自身,创建右子树 将该函数放在复制构造函数中调用,就可以实现复制构造函数算法三:PreOrder(BiNode*R)【1】 算法功能:二叉树的前序遍历【2】 算法基本思想:这个代码用的是优化算法,提前让当前结点出栈。【3】 算法空间时间复杂

3、度分析:O(n)【4】 代码逻辑(伪代码) 如果当前结点为非空,则 访问当前结点 当前结点入栈 将当前结点的左孩子作为当前结点 如果为空 则栈顶结点出栈 则将该结点的右孩子作为当前结点 反复执行这两个过程,直到结点为空并且栈空算法四:InOrder(BiNode*R)【1】 算法功能:二叉树的中序遍历【2】 算法基本思想:递归【3】 算法空间时间复杂度分析:未知【4】 代码逻辑: 如果R为非空: 则调用函数自身遍历左孩子 访问该结点 再调用自身访问该结点的右孩子算法五:LevelOrder(BiNode*R)【1】 算法功能:二叉树的层序遍历【2】 算法基本思想:【3】 算法空间时间复杂度分析

4、:O(n)【4】 代码逻辑(伪代码): 若根结点非空,入队 如果队列不空 对头元素出队 访问该元素 若该结点的左孩子为非空,则左孩子入队; 若该结点的右孩子为非空,则右孩子入队; 算法六:Count(BiNode*R)【1】 算法功能:计算结点的个数【2】 算法基本思想:递归【3】 算法空间时间复杂度分析:未知【4】 代码逻辑: 如果R不为空的话 调用函数自身计算左孩子的结点数 调用函数自身计算右孩子的结点数 template int BiTree:Count(BiNode*R) if(R=NULL)return 0; else int m=Count(R-lchild); int n=Cou

5、nt(R-rchild); return m+n+1; 算法七:Release(BiNode*R)【1】 算法功能:释放动态内存【2】 算法基本思想:左右子树全部释放完毕后再释放该结点【3】 算法空间时间复杂度分析:未知【4】 代码逻辑: 调用函数自身,释放左子树 调用函数自身,释放右子树 释放根结点 释放二叉树 template void BiTree:Release(BiNode*R) if(R!=NULL) Release(R-lchild); Release(R-rchild); delete R; template BiTree:BiTree() Release(root); int

6、 main() int a10=1,2,3,4,5,6,7,8,9,10; BiTree BTree(a,10); BiTreeTree(BTree); BTree.PreOrder(BTree.root); coutendl; Tree.PreOrder(Tree.root); coutendl; BTree.InOrder(BTree.root); coutendl; Tree.InOrder(Tree.root); coutendl; BTree.PostOrder(BTree.root); coutendl; Tree.PostOrder(Tree.root); coutendl; B

7、Tree.LevelOrder(BTree.root); coutendl; Tree.LevelOrder(Tree.root); coutendl; int m=BTree.Count(BTree.root); coutmendl; return 0; 3.测试数据:int a10=1,2,3,4,5;1 2 4 5 31 2 4 5 34 2 5 1 34 5 2 3 11 2 3 4 554.总结:4.1:这次实验大多用了递归的算法,比较好理解。4.2:新得体会:在创建二叉树的过程中,在没有思路的时候可以巧妙的利用递归算法。但是我的代码仍然应该改进,应该进一步简化,减少算法的时间复杂度

8、和空间复杂度。#includeusing namespace std;templateclass BiNode public: T data; BiNode*lchild; BiNode*rchild; ; templateclass BiTree public: BiNode*root; BiTree(T data,int n); BiTree(BiTree& r); void PreOrder(BiNode*R); void InOrder(BiNode*R); void PostOrder(BiNode*R); void LevelOrder(BiNode*R); int Count(B

9、iNode*R); BiTree(); private: void Create(BiNode* &R,T data,int i,int n); void CopyTree(BiNode*sR,BiNode* &dR); void Release(BiNode*R); ; template void BiTree: Create(BiNode* &R,T data,int i,int n) if(i=n&datai-1) R=new BiNode; R-data=datai-1; Create(R-lchild,data,2*i,n); Create(R-rchild,data,2*i+1,n

10、); else R=NULL; template BiTree:BiTree(T data,int n) Create(root,data,1,n); template void BiTree:CopyTree(BiNode*sR,BiNode* &dR) if(sR=NULL) dR=NULL; else dR=new BiNode; dR-data=sR-data; CopyTree(sR-lchild,dR-lchild); CopyTree(sR-rchild,dR-rchild); template BiTree:BiTree(BiTree& p) CopyTree(p.root,t

11、his-root);/this? template void BiTree:PreOrder(BiNode*R) BiNode*S100; int top=-1; while(top!=-1)|(R!=NULL) if(R!=NULL) coutdatalchild; else R=Stop-; R=R-rchild; template void BiTree:InOrder(BiNode*R) if(R!=NULL) InOrder(R-lchild); coutdatarchild); template void BiTree: PostOrder(BiNode*R) if(R!=NULL

12、) PostOrder(R-lchild); PostOrder(R-rchild); coutdata ; template void BiTree:LevelOrder(BiNode*R) BiNode*queue100; int f=0,r=0; if(R!=NULL) queue+r=R; while(f!=r) BiNode*p=queue+f; coutdatalchild!=NULL) queue+r=p-lchild; if(p-rchild!=NULL) queue+r=p-rchild; template int BiTree:Count(BiNode*R) if(R=NU

13、LL)return 0; else int m=Count(R-lchild); int n=Count(R-rchild); return m+n+1; template void BiTree:Release(BiNode*R) if(R!=NULL) Release(R-lchild); Release(R-rchild); delete R; template BiTree:BiTree() Release(root); int main() int a5=1,2,3,4,5; BiTree BTree(a,5); BiTreeTree(BTree); BTree.PreOrder(BTree.root); coutendl; Tree.PreOrder(Tree.root); coutendl; BTree.InOrder(BTree.root); coutendl; BTree.PostOrder(BTree.root); coutendl; BTree.LevelOrder(BTree.root); coutendl; int m=BTree.Count(BTree.root); coutmendl; return 0;

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

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