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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构实验报告Word下载.docx

1、6.输出二叉树b的叶子节点个数;7.释放二叉树b;主程序如下:#include data);else无左孩子rp=RchildNode(p);if (rp!右孩子为%c,rp-无右孩子(3)二叉树b的深度:%dn,BTNodeDepth(b);(4)二叉树b的宽度:,BTWidth(b);(5)二叉树b的节点个数:,Nodes(b);(6)二叉树b的叶子节点个数:,LeafNodes(b);(7)释放二叉树bnDestroyBTNode(b);运行结果如下:7.2. 设计一个程序exp7-2.cpp,实现二叉树的先序遍历、中序遍历和后序遍历的各种递归和非递归算法,以及层次遍历的算法。并对图7.

2、1所示的二叉树b给出求解结果。void PreOrder(BTNode *b)先序遍历的递归算法if (b!%c ,b-访问根节点PreOrder(b-lchild);递归访问左子树rchild);递归访问右子树void PreOrder1(BTNode *b)BTNode *StMaxSize,*p;int top=-1;if(b!top+;根节点入栈Sttop=b;while (top-1) 栈不为空时循环p=Sttop;退栈并访问该节点top-;,p-if (p-rchild!=NULL) 右孩子入栈Sttop=p-rchild;lchild!=NULL) 左孩子入栈lchild;voi

3、d InOrder(BTNode *b) 中序遍历的递归算法InOrder(b-lchild); 递归访问右子树void InOrder1(BTNode *b)p=b;-1 | p!while (p!Sttop=p;p=p-if (top-1)void PostOrder(BTNode *b) 后序遍历的递归算法PostOrder(b-void PostOrder1(BTNode *b)BTNode *StMaxSize;BTNode *p;int flag,top=-1; 栈指针置初值dowhile(b!=NULL) 将t的所有左节点入栈b=b-p=NULL; p指向当前节点的前一个已访问的

4、节点flag=1;while (top!=-1&flag)b=Sttop;取出当前的栈顶元素if (b-rchild=p)右子树不存在或已被访问,访问之访问*b节点p指向则被访问的节点 t指向右子树flag=0; while (top!=-1); void TravLevel(BTNode *b)BTNode *QuMaxSize; 定义循环队列int front,rear; 定义队首和队尾指针front=rear=0; 置队列为空队列rear+;节点指针进入队列Qurear=b;while (rear!=front) 队列不为空front=(front+1)%MaxSize;b=Qufron

5、t; 队头出队列=NULL) 输出左孩子,并入队列lchild-rear=(rear+1)%MaxSize;Qurear=b-=NULL) 输出右孩子,并入队列rchild-BTNode *b;二叉树b:层次遍历序列:TravLevel(b);先序遍历序列: 递归算法:PreOrder(b); 非递归算法:PreOrder1(b);中序遍历序列:InOrder(b);InOrder1(b);后序遍历序列:PostOrder(b);PostOrder1(b);7.3对如图7.1所示的二叉树,设计一个程序exp7-3.cpp完成如下功能:1.输出所有的叶子节点2.输出所有从叶子节点到根节点的路径3

6、.输出2中的第一条最长的路径在algo7-1.cpp文件中void AllPath(BTNode *b)struct snodeBTNode *node; 存放当前节点指针int parent; 存放双亲节点在队列中的位置QuMaxSize;定义顺序队列int front,rear,p; 定义队头和队尾指针front=rear=-1;Qurear.node=b; 根节点指针进入队列Qurear.parent=-1; 根节点没有双亲节点while (frontrchild=NULL) *b为叶子节点 %c到根节点逆路径:p=front;while (Qup.parent!=-1),Qup.nod

7、e-p=Qup.parent;%cn=NULL) 左孩子入队列Qurear.node=b-Qurear.parent=front;=NULL) 右孩子入队列void AllPath1(BTNode *b,ElemType path,int pathlen)int i; %c data,b-for (i=pathlen-1;i=0;i-),pathi);pathpathlen=b-data; 将当前节点放入路径中pathlen+;路径长度增AllPath1(b-lchild,path,pathlen);递归扫描左子树rchild,path,pathlen);递归扫描右子树pathlen-;恢复环

8、境void LongPath(BTNode *b,ElemType path,int pathlen,ElemType longpath,int &longpathlen)if (b=NULL)if (pathlenlongpathlen) 若当前路径更长,将路径保存在longpath中longpathi=pathi;longpathlen=pathlen;else LongPath(b-lchild,path,pathlen,longpath,longpathlen); 递归扫描左子树rchild,path,pathlen,longpath,longpathlen); 递归扫描右子树void

9、 DispLeaf(BTNode *b)if (b-rchild=NULL) DispLeaf(b-ElemType pathMaxSize,longpathMaxSize;int i,longpathlen=0;b的叶子节点:DispLeaf(b);AllPath:AllPath(b);AllPath1:AllPath1(b,path,0);LongPath(b,path,0,longpath,longpathlen);第一条最长逆路径长度:,longpathlen);第一条最长逆路径:for (i=longpathlen-1;,longpathi);运行结果如下:7.4. 设计一个程序ex

10、p7-4.cpp,实现由先序遍历序列和中序遍历序列以及由中序遍历序列和后序遍历序列构造一棵二叉树的功能,要求以括号表示和凹入表示法输出该二叉树。并用先序遍历序列“ABDEHJKLMNCFGI”和中序遍历序列“DBJHLKMNEAFCGI”以及由中序遍历序列“DBJHLKMNEAFCGI” 和后序遍历序列“DJLNMKHEBFIGCA”进行验证。stdio. void DispBTNode(BTNode *b);BTNode *CreateBT1(char *pre,char *in,int n)BTNode *s;char *p;int k;if (ndata=*pre;for (p=in;p

11、in+n;p+)在中序序列中找等于*ppos的位置kif (*p=*pre)break;k=p-in;lchild=CreateBT1(pre+1,in,k);rchild=CreateBT1(pre+k+1,p+1,n-k-1);return s;BTNode *CreateBT2(char *post,char *in,int n,int m)char *p,*q,*maxp;int maxpost,maxin,k;maxpost=-1;p+)求in中全部字符中在post中最右边的那个字符for (q=post;qmaxpost) maxpost=k;maxp=p;maxin=p-in;

12、创建二叉树节点*sdata=postmaxpost;lchild=CreateBT2(post,in,maxin,m);rchild=CreateBT2(post,maxp+1,n-maxin-1,m);void DispBTNode1(BTNode *b) 以凹入表表示法输出一棵二叉树int levelMaxSize2,top=-1,n,i,width=4;char type; 根节点入栈leveltop0=width;leveltop1=2; 2表示是根 退栈并凹入显示该节点值n=leveltop0;switch(leveltop1)case 0:type=L左节点之后输出(L)case 1:R右节点之后输出(R)case 2:B根节点之后前输出(B)for (i=1;i=NULL & tb-ltag=0) 有左孩子 InOrder(tb- printf(,tb-rtag=0) 有右孩子void ThInOrder(TBTNode *tb) 中序递归算法 InOrder(tb-void ThInOrder1(TBTNode *tb) 中序非递归算法 TBTNode *p=tb- 指向根节点 while (p!=tb) while (p-ltag=0) p=p- printf( while (p-rtag=1 & p- p=p- printf(

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

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