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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构二叉树习题含答案上课讲义Word文档格式.docx

1、(10)一棵非空的二叉树的先序遍历序列与后序遍历序列正好相反,则该二叉树一定满足( )。A所有的结点均无左孩子 B所有的结点均无右孩子C只有一个叶子结点 D是任意一棵二叉树(11)某二叉树的前序序列和后序序列正好相反,则该二叉树一定是( )的二叉树。A空或只有一个结点 B任一结点无左子树 C高度等于其结点数 D任一结点无右子树(12)若X是二叉中序线索树中一个有左孩子的结点,且X不为根,则X的前驱为( )。AX的双亲 BX的右子树中最左的结点 CX的左子树中最右结点 DX的左子树中最右叶结点(13)引入二叉线索树的目的是( )。A加快查找结点的前驱或后继的速度 B为了能在二叉树中方便的进行插入

2、与删除C为了能方便的找到双亲 D使二叉树的遍历结果唯一(14)线索二叉树是一种( )结构。A逻辑 B 逻辑和存储 C物理 D线性(15)设F是一个森林,B是由F变换得的二叉树。若F中有n个非终端结点,则B中右指针域为空的结点有( )个。A n-1 Bn C n+1 D n+22应用题(1)试找出满足下列条件的二叉树先序序列与后序序列相同 中序序列与后序序列相同先序序列与中序序列相同 中序序列与层次遍历序列相同先序遍历二叉树的顺序是“根左子树右子树”,中序遍历“左子树根右子树”,后序遍历顺序是:“左子树右子树根,根据以上原则,本题解答如下:() 若先序序列与后序序列相同,则或为空树,或为只有根结

3、点的二叉树() 若中序序列与后序序列相同,则或为空树,或为任一结点至多只有左子树的二叉树() 若先序序列与中序序列相同,则或为空树,或为任一结点至多只有右子树的二叉树() 若中序序列与层次遍历序列相同,则或为空树,或为任一结点至多只有右子树的二叉树(2)设一棵二叉树的先序序列: A B D F C E G H ,中序序列: B F D A G E H C画出这棵二叉树。画出这棵二叉树的后序线索树。将这棵二叉树转换成对应的树(或森林)。 (1) (2)(3) 假设用于通信的电文仅由8个字母组成,字母在电文中出现的频率分别为0.07,0.19,0.02,0.06,0.32,0.03,0.21,0.

4、10。试为这8个字母设计赫夫曼编码。试设计另一种由二进制表示的等长编码方案。对于上述实例,比较两种方案的优缺点。解:方案1;哈夫曼编码先将概率放大100倍,以方便构造哈夫曼树。 w=7,19,2,6,32,3,21,10,按哈夫曼规则:【(2,3),6, (7,10)】, 19, 21, 32(100)(40) (60)19 21 32 (28)(17) (11) 7 10 6 (5) 2 3方案比较:方案1的WPL2(0.19+0.32+0.21)+4(0.07+0.06+0.10)+5(0.02+0.03)=1.44+0.92+0.25=2.61方案2的WPL3(0.19+0.32+0.2

5、1+0.07+0.06+0.10+0.02+0.03)=3结论:哈夫曼编码优于等长二进制编码(4)已知下列字符A、B、C、D、E、F、G的权值分别为3、12、7、4、2、8,11,试填写出其对应哈夫曼树HT的存储结构的初态和终态。初态:weightparentlchildrchild1321274568119101315202747终态3算法设计题以二叉链表作为二叉树的存储结构,编写以下算法:(1)统计二叉树的叶结点个数。int LeafNodeCount(BiTree T) if(T=NULL) return 0; /如果是空树,则叶子结点个数为0 else if(T-lchild=NULL

6、&T-rchild=NULL) return 1; /判断该结点是否是叶子结点(左孩子右孩子都为空),若是则返回1 else return LeafNodeCount(T-lchild)+LeafNodeCount(T-rchild);(2)判别两棵树是否相等。(3)交换二叉树每个结点的左孩子和右孩子。void ChangeLR(BiTree &T) BiTree temp; if(T- return; temp = T-lchild; T-lchild = T-rchild;rchild = temp; ChangeLR(T-lchild);(4)设计二叉树的双序遍历算法(双序遍历是指对于二

7、叉树的每一个结点来说,先访问这个结点,再按双序遍历它的左子树,然后再一次访问这个结点,接下来按双序遍历它的右子树)。void DoubleTraverse(BiTree T) if(T = NULL) cout(5)计算二叉树最大的宽度(二叉树的最大宽度是指二叉树所有层中结点个数的最大值)。题目分析 求二叉树高度的算法见上题。求最大宽度可采用层次遍历的方法,记下各层结点数,每层遍历完毕,若结点数大于原先最大宽度,则修改最大宽度。int Width(BiTree bt)/求二叉树bt的最大宽度if (bt=null) return (0); /空二叉树宽度为0else BiTree Q;/Q是队

8、列,元素为二叉树结点指针,容量足够大 front=1;rear=1;last=1;/front队头指针,rear队尾指针,last同层最右结点在队列中的位置 temp=0; maxw=0; /temp记局部宽度, maxw记最大宽度 Qrear=bt; /根结点入队列 while(frontlchild!=null) Q+rear=p- /左子女入队if (p-rchild! /右子女入队 if (frontlast) /一层结束, last=rear;if(tempmaxw) maxw=temp;/last指向下层最右元素, 更新当前最大宽度 /if /while return (maxw)

9、;/结束width(6)用按层次顺序遍历二叉树的方法,统计树中具有度为1的结点数目。int Level(BiTree bt) /层次遍历二叉树,并统计度为1的结点的个数int num=0; /num统计度为1的结点的个数 if(bt)QueueInit(Q); QueueIn(Q,bt);/Q是以二叉树结点指针为元素的队列 while(!QueueEmpty(Q)p=QueueOut(Q); printf(p-data); /出队,访问结点if(p-lchild & !p-rchild |! p-rchild)num+;/度为1的结点lchild) QueueIn(Q,p- /非空左子女入队r

10、child) QueueIn(Q,p- /非空右子女入队 /if(bt) return(num); /返回度为1的结点的个数 (7)求任意二叉树中第一条最长的路径长度,并输出此路径上各结点的值。题目分析因为后序遍历栈中保留当前结点的祖先的信息,用一变量保存栈的最高栈顶指针,每当退栈时,栈顶指针高于保存最高栈顶指针的值时,则将该栈倒入辅助栈中,辅助栈始终保存最长路径长度上的结点,直至后序遍历完毕,则辅助栈中内容即为所求。void LongestPath(BiTree bt)/求二叉树中的第一条最长路径长度BiTree p=bt,l,s; /l, s是栈,元素是二叉树结点指针,l中保留当前最长路径

11、中的结点 int i,top=0,tag,longest=0; while(p | top0) while(p) s+top=p;tagtop=0; p=p-Lc; /沿左分枝向下 if(tagtop=1) /当前结点的右分枝已遍历 if(!stop-Lc &Rc) /只有到叶子结点时,才查看路径长度if(toplongest) for(i=1;i0) tagtop=1; p=stop.Rc; /沿右子分枝向下 /while(p!=null|top/结束LongestPath(8)输出二叉树中从每个叶子结点到根结点的路径。题目分析采用先序遍历的递归方法,当找到叶子结点*b时,由于*b叶子结点尚

12、未添加到path中,因此在输出路径时还需输出b-data值。对应的递归算法如下:void AllPath(BTNode *b,ElemType path,int pathlen) int i; if (b!=NULL) if (b-lchild=NULL & b-rchild=NULL) /*b为叶子结点 cout data =0;i-) endl; pathpathlen=b- /将当前结点放入路径中 pathlen+; /路径长度增1 AllPath(b-lchild,path,pathlen); /递归扫描左子树rchild,path,pathlen); /递归扫描右子树 pathlen-; /恢复环境

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

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