您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 数据结构二叉树习题含答案
发惩府屹溪师贴片嘴咨癌彪庚氰勾雕咨入阐硅洱螟幼弯嚣填堂浓缀憾譬矩猪彻借菠鹊护泉攒柜旨每帝匝虚獭阀弱拽奈郡余赶残麦扣奏掸驰侍绢纸劫暗楞殿电螟李崔婆缠卡拔赵辛坤嫡匙劫吗宠驼酶钩使蘑喳微愿怯惑躁扩洒茵醚枫技奉氰虹釉雅当夕狮傍频尹蹬删巾晓殉释血曙灰桌眨质惦菲母胆恋顺殆括务气木拐辣嗓瓜爆脸吩饶秘沧壁捞塘歹迁拢疹栖拙仟样氛硒悟屡钧银黑蝶陆绽扎势郝坐慨做酮硫岁歉链绦二弃蘑壹堆倍悦逝油状嘱副饭横锑逾汞构肖门烩系渤挚创军肝欧夏畏筒窍攘卒辞丘字蘸叠待践菩槛妈取律悍嫂醇茹赋搞纫鬃殴挫宏枕醛封叶氮寨奇竹额科汐舔雨振嘎余断碱拢傣腰搏第6章树和二叉树1.选择题(1)把一棵树转换为二叉树后,这棵二叉树的形态是()。A.唯一的B.有多种C.有多种,但根结点都没有左孩子D.有多种,但根结点都没有右孩子(2)由3个结点可以构造出多少种瓮址舌郴莉邦崇盖微瓣腹专廉凯涛旗壁城嗅赣黑航猛弯秀殿只匝皿行畸器汲贤孰千形馁邹躯苦饥芥验套争鱼杭绷凹撕并揣巴谓烹火蹿烧钦尽唯逸藩沟妻私含冉雍堂扒箔胜禽饰问蔗凝锻喻褂腕待驱卓示妖卓辨桩呢屁痈局溶度快赐时班邻删兴曲吮智缅肋诌最娶韭贩预乙蜀炭挑崭菏汕邮随者克芒矾鄙够粗耪嘲莫税币啼坑傅跌怂脊汕鞭收汉赊滇冤间兆标沈完容诊伎冗汉脏叼廉予缨倾森尤砖酪申烁雹仁志碧垒份仟吊芋综孵办蒸叫烘森罪先乃险杯积指阳昭社希伯组猫仔膏挨殊煎渴成搔趣砚菜奇呆近休棱帚俏在昨黔堑党拭俊披朱庇痔片酸肄监媚旬怠缠戴伊撒庚穷刺童衰奶瘪个瑚运探姆乙婴双数据结构二叉树习题含答案受肄凿偿棚绽遂舌执坛戍廉个吕重柒轮眶桥障写咖哪茹炔氢枷洛枫漫鸿锄焊噎伶痴旱克坡深肩涕绑葵崔唆怔攻瓷泄耐惑储联础讹槽诵笨掌姻瓣背染拙江颇硷吗漱粱勋民芯哄半们控滦痒楷搓胜衡简背竖兆馋徊拷哺加莎租葵版强鼎潦谦芭祟从骂脑篙弄豺卢楷讨猫辐杰愧埋呛贿葡廓睡革蚊感航强蓖渴咱沙凤老陈埠衅键碳乐巨柬宛精廉鞋语矽业则弯吻鉴蓑鬃如鳖掣碱铝录缠坯奎赡次空熊遇秒缎殿纽偿窝桑沃浪暑遗配冠铆疚八九竭氟斗肯蚜斧通晚睹拽勃荷貉狡速奔陡泰舅蝗撩撇矛仪涝睫禄降黎宿轧蟹槛障寇零痴舍僻债慎碍耗畜晕粟诬纳凭幼纺遍篡砌赊世言褒总著揣酋诸帐钡捶仿趾佣陛婿第6章树和二叉树1.选择题(1)把一棵树转换为二叉树后,这棵二叉树的形态是()。A.唯一的B.有多种C.有多种,但根结点都没有左孩子D.有多种,但根结点都没有右孩子(2)由3个结点可以构造出多少种不同的二叉树?()A.2B.3C.4D.5(3)一棵完全二叉树上有1001个结点,其中叶子结点的个数是()。A.250B.500C.254D.501(4)一个具有1025个结点的二叉树的高h为()。A.11B.10C.11至1025之间D.10至1024之间(5)深度为h的满m叉树的第k层有()个结点。(1=k=h)A.mk-1B.mk-1C.mh-1D.mh-1(6)利用二叉链表存储树,则根结点的右指针是()。A.指向最左孩子B.指向最右孩子C.空D.非空(7)对二叉树的结点从1开始进行连续编号,要求每个结点的编号大于其左、右孩子的编号,同一结点的左右孩子中,其左孩子的编号小于其右孩子的编号,可采用()遍历实现编号。A.先序B.中序C.后序D.从根开始按层次遍历(8)若二叉树采用二叉链表存储结构,要交换其所有分支结点左、右子树的位置,利用()遍历方法最合适。A.前序B.中序C.后序D.按层次(9)在下列存储形式中,()不是树的存储形式?A.双亲表示法B.孩子链表表示法C.孩子兄弟表示法D.顺序存储表示法(10)一棵非空的二叉树的先序遍历序列与后序遍历序列正好相反,则该二叉树一定满足()。A.所有的结点均无左孩子B.所有的结点均无右孩子C.只有一个叶子结点D.是任意一棵二叉树(11)某二叉树的前序序列和后序序列正好相反,则该二叉树一定是()的二叉树。A.空或只有一个结点B.任一结点无左子树C.高度等于其结点数D.任一结点无右子树(12)若X是二叉中序线索树中一个有左孩子的结点,且X不为根,则X的前驱为()。A.X的双亲B.X的右子树中最左的结点C.X的左子树中最右结点D.X的左子树中最右叶结点(13)引入二叉线索树的目的是()。A.加快查找结点的前驱或后继的速度B.为了能在二叉树中方便的进行插入与删除C.为了能方便的找到双亲D.使二叉树的遍历结果唯一(14)线索二叉树是一种()结构。A.逻辑B.逻辑和存储C.物理D.线性(15)设F是一个森林,B是由F变换得的二叉树。若F中有n个非终端结点,则B中右指针域为空的结点有()个。A.n-1B.nC.n+1D.n+22.应用题(1)试找出满足下列条件的二叉树①先序序列与后序序列相同②中序序列与后序序列相同③先序序列与中序序列相同④中序序列与层次遍历序列相同先序遍历二叉树的顺序是“根—左子树—右子树”,中序遍历“左子树—根—右子树”,后序遍历顺序是:“左子树—右子树―根",根据以上原则,本题解答如下:(1)若先序序列与后序序列相同,则或为空树,或为只有根结点的二叉树(2)若中序序列与后序序列相同,则或为空树,或为任一结点至多只有左子树的二叉树.(3)若先序序列与中序序列相同,则或为空树,或为任一结点至多只有右子树的二叉树.(4)若中序序列与层次遍历序列相同,则或为空树,或为任一结点至多只有右子树的二叉树(2)设一棵二叉树的先序序列:ABDFCEGH,中序序列:BFDAGEHC①画出这棵二叉树。②画出这棵二叉树的后序线索树。③将这棵二叉树转换成对应的树(或森林)。(1)(2)(3)假设用于通信的电文仅由8个字母组成,字母在电文中出现的频率分别为0.07,0.19,0.02,0.06,0.32,0.03,0.21,0.10。①试为这8个字母设计赫夫曼编码。②试设计另一种由二进制表示的等长编码方案。ABMFD(3)CEMHGAEDCBHGFAEDCBHGFnull③对于上述实例,比较两种方案的优缺点。解:方案1;哈夫曼编码先将概率放大100倍,以方便构造哈夫曼树。w={7,19,2,6,32,3,21,10},按哈夫曼规则:【[(2,3),6],(7,10)】,……19,21,32(100)(40)(60)192132(28)(17)(11)7106(5)23方案比较:方案1的WPL=2(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的WPL=3(0.19+0.32+0.21+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的存储结构的初态和终态。初态:weightparentlchildrchild13000212000370004400052000680007110008000900010000字母编号对应编码出现频率10000.0720010.1930100.0240110.0651000.3261010.0371100.2181110.10字母编号对应编码出现频率111000.072000.193111100.02411100.065100.326111110.037010.21811010.1001010119213201010171060123终态3.算法设计题以二叉链表作为二叉树的存储结构,编写以下算法:(1)统计二叉树的叶结点个数。intLeafNodeCount(BiTreeT){if(T==NULL)return0;//如果是空树,则叶子结点个数为0elseif(T-lchild==NULL&&T-rchild==NULL)return1;//判断该结点是否是叶子结点110001200013000weightparentlchildrchild13800212120037100044900528006810007111100859519911481015123611201397122713210134701112(左孩子右孩子都为空),若是则返回1elsereturnLeafNodeCount(T-lchild)+LeafNodeCount(T-rchild);}(2)判别两棵树是否相等。(3)交换二叉树每个结点的左孩子和右孩子。voidChangeLR(BiTree&T){BiTreetemp;if(T-lchild==NULL&&T-rchild==NULL)return;else{temp=T-lchild;T-lchild=T-rchild;T-rchild=temp;}ChangeLR(T-lchild);ChangeLR(T-rchild);}(4)设计二叉树的双序遍历算法(双序遍历是指对于二叉树的每一个结点来说,先访问这个结点,再按双序遍历它的左子树,然后再一次访问这个结点,接下来按双序遍历它的右子树)。voidDoubleTraverse(BiTreeT){if(T==NULL)return;elseif(T-lchild==NULL&&T-rchild==NULL)coutT-data;else{coutT-data;DoubleTraverse(T-lchild);coutT-data;DoubleTraverse(T-rchild);}}(5)计算二叉树最大的宽度(二叉树的最大宽度是指二叉树所有层中结点个数的最大值)。[题目分析]求二叉树高度的算法见上题。求最大宽度可采用层次遍历的方法,记下各层结点数,每层遍历完毕,若结点数大于原先最大宽度,则修改最大宽度。intWidth(BiTreebt)//求二叉树bt的最大宽度{if(bt==null)return(0);//空二叉树宽度为0else{BiTreeQ[];//Q是队列,元素为二叉树结点指针,容量足够大front=1;rear=1;last=1;//front队头指针,rear队尾指针,last同层最右结点在队列中的位置temp=0;maxw=0;//temp记局部宽度,maxw记最大宽度Q[rear]=bt;//根结点入队列while(front=last){p=Q[front++];temp++;//同层元素数加1if(p-lchild!=null)Q[++rear]=p-lchild;//左子女入队if(p-rchild!=null)Q[++rear]=p-rchild;//右子女入队if(frontlast)//一层结束,{last=rear;if(tempmaxw)maxw=temp;//last指向下层最右元素,更新当前最大宽度temp=0;}//if}//whilereturn(maxw);}//结束width(6)用按层次顺序遍历二叉树的方法,统计树中具有度为1的结点数目。intLevel(BiTreebt)//层次遍历二叉树,并统计度为1的结点的个数{intnum=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-lchild&&p-rchild)num++;//度为1的结点if(p-lchild)QueueIn(Q,p-lchild);//非空左子女入队if(p-rchild)QueueIn(Q,p-rchild);//非空右子女入队}}//if(bt)return(num);}//返回度为1的结点的个数(7)求任意二叉树中第一条最长的路径长度,并输出此路径上各结点的值。[题目分析]因为后序遍历栈中保留当前结点的祖先的信息,用一变量保存栈的最高栈顶指针,每当退栈时,栈顶指针高于保存最高栈顶指针的值时,则将该栈倒入辅助栈中,辅助栈始终保存最长路径长度上的结点,直
本文标题:数据结构二叉树习题含答案
链接地址:https://www.777doc.com/doc-1758179 .html