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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

《数据结构与算法》实验指导与报告书exp6BitreeWord格式文档下载.docx

1、_。(5)该二叉树的叶子结点数为:_。(6)交换该二叉树所有结点的左右次序得到的新二叉树为:(画出新二叉树的图)(7)新二叉树的三种遍历序列分别为:exp6_1.c参考程序如下:#includemalloc.h#define MAX 20/*-二叉树的二叉链表存储表示-*/typedef struct BTNode char data ; /*结点数据*/ struct BTNode *lchild; /*左孩子指针*/ struct BTNode *rchild ; /*右孩子指针*/*BiTree;/*-非递归遍历辅助队列-*/typedef struct BiTree dataMAX;

2、int front,rear; queue;void createBiTree(BiTree *t); /*先序遍历创建二叉树*/void PreOrder(BiTree p); /*先序遍历二叉树*/void InOrder(BiTree p); /*中序遍历二叉树*/void PostOrder(BiTree p); /*后序遍历二叉树*/void RPreorder(BiTree p); /*先序遍历的非递归算法*/void RInorder(BiTree p); /*中序遍历的非递归算法*/void RPostorder(BiTree p); /*后序遍历的非递归算法*/int dep

3、th(BiTree t); /*求二叉树的深度算法*/BiTree gettreenode(char x,BiTree lptr,BiTree rptr);/*后序复制二叉树-建立结点*/BiTree copytree(BiTree t); /*以后序遍历的方式复制二叉树*/BiTree swap(BiTree b); /*交换二叉树的结点的左右孩子*/void ccOrder(BiTree t); /*利用循环队列实现层次遍历*/int Leaves(BiTree t); /*统计二叉树叶子结点(递归)*/void release(BiTree t); /*释放二叉树*/*先序遍历创建二叉树

4、*/void createBiTree(BiTree *t) char s; BiTree q; printf(nplease input data:); s=getchar(); getchar(); /*扔掉存在键盘缓冲区的输入结束回车符*/ if(s=*) /*子树为空则返回*/ *t=NULL; return; q=(BiTree)malloc(sizeof(struct BTNode); if(q=NULL)Memory alloc failure! exit(0); q-data=s; *t=q; createBiTree(&q-lchild);/*递归建立左子树*/rchild)

5、;/*递归建立右子树*/*createBiTree*/*先序遍历二叉树,补充递归算法*/void PreOrder(BiTree p)/*PreOrder*/*中序遍历二叉树,补充递归算法*/void InOrder(BiTree p)/*InOrder*/*后序遍历二叉树,补充递归算法*/void PostOrder(BiTree p)/*PostOrder*/*先序遍历的非递归算法*/void RPreorder(BiTree p) BiTree stackMAX,q; int top=0,i; for(i=0; idata); if(q-rchild!=NULL) _; /*右指针进栈*

6、/lchild!=NULL) q=q-lchild; /*顺着左指针继续向下*/ else if(top0) q=stack-top; /*左子树访问完,出栈继续访问右子树结点*/ else q=NULL;/*RPreorder*/*中序遍历的非递归算法*/void RInorder(BiTree p)/*RInorder*/*后序遍历的非递归算法*/void RPostorder(BiTree p) int i,top=0,flagMAX; i+) /*初始化栈*/ stacki=NULL; flagi=0;=NULL|top!=0) if(q!=NULL) /*当前结点进栈,先遍历其左子树

7、*/ stacktop=q; flagtop=0; top+; q=q- else while(top) if(flagtop-1=0) /*遍历结点的右子树*/ q=stacktop-1;rchild; flagtop-1=1; break; q=stack-top; /*遍历结点*/ if(top=0) break;/*RPostorder*/*求二叉树的深度算法,补充递归算法*/int depth(BiTree t)/*depth*/*建立结点*/BiTree gettreenode(char x,BiTree lptr,BiTree rptr) BiTree t; t=(BiTree)

8、malloc(sizeof(struct BTNode); t- data = x;lchild = lptr;rchild = rptr; return(t);/*gettreenode*/*以后序遍历的方式递归复制二叉树*/BiTree copytree(BiTree t) BiTree newlptr,newrptr,newnode; if(t=NULL) return NULL; if(t- newlptr = copytree(t- else newlptr = NULL; newrptr = copytree(t- else newrptr = NULL; newnode = ge

9、ttreenode(t-data, newlptr, newrptr); return(newnode);/*copytree*/*交换二叉树的结点的左右孩子*/BiTree swap(BiTree b) BiTree t,t1,t2; if(b=NULL) t=NULL;data=b-data; t1=swap(b- /*递归交换左子树上的结点*/ t2=swap(b- /*递归交换右子树上的结点*/lchild=t2; /*交换根t的左右子树*/rchild=t1;/*swap*/*利用循环队列实现层次遍历*/void ccOrder(BiTree t)/*ccOrder*/*统计二叉树叶

10、子结点,补充递归算法*/int Leaves(BiTree t)/*Leaves*/*释放二叉树*/void release(BiTree t) if(t! release(t- free(t);/*release*/int main() BiTree t=NULL,copyt=NULL; int select; don*MENU*n 1. 按先序序列建立二叉树n 2. 遍历二叉树(三种递归方法)n 3. 遍历二叉树(三种非递归方法)n 4. 层次遍历二叉树n 5. 输出二叉树的深度n 6. 统计二叉树的叶子结点数(递归)n 7. 后序遍历方式复制一棵二叉树n 8. 交换二叉树所有结点的左右孩

11、子n 0. EXITninput choice: scanf(%d,&select); switch(select) case 1:n1-按先序序列建立二叉树:n请依次输入结点序列:t);二叉树创建成功!二叉树未创建成功! case 2:n2-遍历二叉树(三种递归方法):n先序遍历序列: PreOrder(t);n中序遍历序列: InOrder(t);n后序遍历序列: PostOrder(t); case 3:n3-遍历二叉树(三种非递归方法):n先序遍历的非递归: RPreorder(t);n中序遍历的非递归: RInorder(t);n后序遍历的非递归: RPostorder(t); ca

12、se 4:n4-层次遍历二叉树:n按层次遍历: ccOrder(t); case 5:n5-输出二叉树的深度:n二叉树的深度:,depth(t); case 6:n6-统计二叉树的叶子结点数(递归):n叶子结点数为:,Leaves(t); case 7:n7-后序遍历方式复制一棵二叉树: copyt=copytree(t); if(copyt!n先序递归遍历复制的二叉树: PreOrder(copyt);n复制失败! case 8:n8-交换二叉树所有结点的左右孩子:n先序递归遍历交换后的二叉树: PreOrder(swap(t); /*如需输出中序和后序遍历的结果,增加调用*/ case 0

13、: release(t); /*释放二叉树*/ default: while(select); return 0;2、编写程序exp6_2.c,实现哈夫曼树的建立和哈夫曼编码。若有一组字符序列a,c,e,i,s,t,w,对应的出现频率为10,1,15,12,3,4,13。以此序列创建哈夫曼树和哈夫曼编码。回答下列问题,补充完整程序,并调试运行验证结果。(1)构造该序列的哈夫曼树,画出哈夫曼树的形态。(以结点值左小右大的原则)(2)写出对应的哈夫曼编码。(3)计算编码的WPL。exp6_2.c程序代码参考如下:#define MAXVALUE 10000 /*定义最大权值*/#define MA

14、XLEAF 30 /*定义哈夫曼树中叶子结点个数*/#define MAXNODE MAXLEAF*2-1#define MAXBIT 10 /*定义哈夫曼编码的最大长度*/typedef struct /*哈夫曼编码结构*/ int bitMAXBIT; int start;HCodeType;typedef struct /*哈夫曼树结点结构*/ char data; int weight; int parent; int lchild; int rchild;HNodeType;void HuffmanTree(HNodeType HuffNode,int *hn);void Huffm

15、anCode(HNodeType HuffNode,HCodeType HuffCode,int n);void HuffmanTree(HNodeType HuffNode,int *hn)/*哈夫曼树的构造算法*/ int i,j,m1,m2,x1,x2,n;n:n); /*输入叶子结点个数*/ for (i=0;2*n-1; i+) /*数组HuffNode 初始化*/ ;HuffNode:n; i+)%c,%dHuffNodei.data,&HuffNodei.weight); /*输入n个叶子结点的权值*/n-1; i+) /*构造哈夫曼树*/ m1=m2=MAXVALUE; x1=

16、x2=0; for (j=0; jn+i; j+) if (HuffNodej.weightm1 & HuffNodej.parent=-1) m2=m1; x2=x1; m1=HuffNodej.weight; x1=j; else if (HuffNodej.weightm2 & m2=HuffNodej.weight; x2=j; /*将找出的两棵子树合并为一棵子树*/ HuffNodex1.parent=n+i; HuffNodex2.parent=n+i; HuffNoden+i.weight= ; HuffNoden+i.lchild=x1; HuffNoden+i.rchild=

17、x2; *hn=n;void HuffmanCode(HNodeType HuffNode,HCodeType HuffCode,int n) /*生成哈夫曼编码*/ HCodeType cd; int i,j,c,p; i+) /*求每个叶子结点的哈夫曼编码*/ cd.start=n-1; c=i; p=HuffNodec.parent; while(p!=-1) /*由叶结点向上直到树根*/ if(HuffNodep.lchild=c)/*左分支编码为0*/ /*右分支编码为1*/ cd.start-; c=p; for(j=cd.start+1; j+) /*保存求出的每个叶结点的哈夫曼

18、编码和编码的起始位*/ HuffCodei.bitj=cd.bitj; HuffCodei.start=cd.start; i+) /*输出每个叶子结点的哈夫曼编码*/%c: ,HuffNodei.data); for(j=HuffCodei.start+1;,HuffCodei.bitj); HNodeType HuffNodeMAXNODE; HCodeType HuffCodeMAXLEAF; int n,i;create HuffmanTree: HuffmanTree(HuffNode,& putchar(HuffNodei.data);%3d,HuffNodei.weight);,HuffNodei.parent);,HuffNodei.lchild);,HuffNodei.rchild); HuffmanCode(HuffNode,HuffCode,n);【拓展实验】3、实现哈夫曼的解码功能。在上题的基础上,根据给定的哈夫曼编码译文,进行解码,输出原字符编码。【实验小结】

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

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