数据结构课后习题和解析_第1页
数据结构课后习题和解析_第2页
数据结构课后习题和解析_第3页
数据结构课后习题和解析_第4页
数据结构课后习题和解析_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

...wd......wd......wd...第六章习题1.试分别画出具有3个结点的树和3个结点的二叉树的所有不同形态。2.对题1所得各种形态的二叉树,分别写出前序、中序和后序遍历的序列。3.一棵度为k的树中有n1个度为1的结点,n2个度为2的结点,……,nk个度为k的结点,则该树中有多少个叶子结点并证明之。4.假设一棵二叉树的先序序列为EBADCFHGIKJ,中序序列为ABCDEFGHIJK,请画出该二叉树。5.二叉树有50个叶子结点,则该二叉树的总结点数至少应有多少个6.给出满足以下条件的所有二叉树:①前序和后序一样②中序和后序一样③前序和后序一样7.n个结点的K叉树,假设用具有k个child域的等长链结点存储树的一个结点,则空的Child域有多少个8.画出与以下序列对应的树T:树的先根次序访问序列为GFKDAIEBCHJ;树的后根次序访问序列为DIAEKFCJHBG。9.假设用于通讯的电文仅由8个字母组成,字母在电文中出现的频率分别为:0.07,0.19,0.02,0.06,0.32,0.03,0.21,0.10请为这8个字母设计哈夫曼编码。10.二叉树采用二叉链表存放,要求返回二叉树T的后序序列中的第一个结点指针,是否可不用递归且不用栈来完成?请简述原因.11.画出和以下树对应的二叉树:12.二叉树按照二叉链表方式存储,编写算法,计算二叉树中叶子结点的数目。13.编写递归算法:对于二叉树中每一个元素值为x的结点,删去以它为根的子树,并释放相应的空间。14.分别写函数完成:在先序线索二叉树T中,查找给定结点*p在先序序列中的后继。在后序线索二叉树T中,查找给定结点*p在后序序列中的前驱。15.分别写出算法,实现在中序线索二叉树中查找给定结点*p在中序序列中的前驱与后继。16.编写算法,对一棵以孩子-兄弟链表表示的树统计其叶子的个数。17.对以孩子-兄弟链表表示的树编写计算树的深度的算法。18.二叉树按照二叉链表方式存储,利用栈的根本操作写出后序遍历非递归的算法。19.设二叉树按二叉链表存放,写算法判别一棵二叉树是否是一棵正则二叉树。正则二叉树是指:在二叉树中不存在子树个数为1的结点。20.计算二叉树最大宽度的算法。二叉树的最大宽度是指:二叉树所有层中结点个数的最大值。21.二叉树按照二叉链表方式存储,利用栈的根本操作写出先序遍历非递归形式的算法。22.证明:给定一棵二叉树的前序序列与中序序列,可唯一确定这棵二叉树;给定一棵二叉树的后序序列与中序序列,可唯一确定这棵二叉树;23.二叉树按照二叉链表方式存储,编写算法,计算二叉树中叶子结点的数目。24.二叉树按照二叉链表方式存储,编写算法,将二叉树左右子树进展交换。实习题1.[问题描述]建设一棵用二叉链表方式存储的二叉树,并对其进展遍历〔先序、中序和后序〕,打印输出遍历结果。[根本要求]从键盘承受输入先序序列,以二叉链表作为存储构造,建设二叉树〔以先序来建设〕并对其进展遍历〔先序、中序、后序〕,然后将遍历结果打印输出。要求采用递归和非递归两种方法实现。[测试数据]ABCффDEфGффFффф〔其中ф表示空格字符〕输出结果为:先序:ABCDEGF中序:CBEGDFA后序:CGBFDBA2.二叉树按照二叉链表方式存储,编写算法,要求实现二叉树的竖向显示〔竖向显示就是二叉树的按层显示〕。3.如题1要求建设好二叉树,按凹入表形式打印二叉树构造,如以以下图所示。2.按凹入表形式打印树形构造,如以以下图所示。第六章答案6.1分别画出具有3个结点的树和3个结点的二叉树的所有不同形态。【解答】具有3个结点的树具有3个结点的二叉树6.3一棵度为k的树中有n1个度为1的结点,n2个度为2的结点,……,nk个度为k的结点,则该树中有多少个叶子结点【解答】设树中结点总数为n,则n=n0+n1+……+nk树中分支数目为B,则B=n1+2n2+3n3+……+knk因为除根结点外,每个结点均对应一个进入它的分支,所以有n=B+1即n0+n1+……+nk=n1+2n2+3n3+……+knk+1由上式可得叶子结点数为:n0=n2+2n3+……+(k-1)nk+16.5二叉树有50个叶子结点,则该二叉树的总结点数至少应有多少个【解答】n0表示叶子结点数,n2表示度为2的结点数,则n0=n2+1所以n2=n0–1=49,当二叉树中没有度为1的结点时,总结点数n=n0+n2=996.6试分别找出满足以下条件的所有二叉树:(1)前序序列与中序序列一样;(2)中序序列与后序序列一样;(3)前序序列与后序序列一样。【解答】

(1)前序与中序一样:空树或缺左子树的单支树;

(2)中序与后序一样:空树或缺右子树的单支树;

(3)前序与后序一样:空树或只有根结点的二叉树。6.9

假设通讯的电文仅由8个字母组成,字母在电文中出现的频率分别为:0.07,0.19,0.02,0.06,0.32,0.03,0.21,0.10请为这8个字母设计哈夫曼编码。【解答】构造哈夫曼树如下:哈夫曼编码为:I1:11111I5:1100I2:11110I6:10I3:1110I7:01I4:1101I8:006.11画出如以以下图所示树对应的二叉树。【解答】6.15分别写出算法,实现在中序线索二叉树T中查找给定结点*p在中序序列中的前驱与后继。在先序线索二叉树T中,查找给定结点*p在先序序列中的后继。在后序线索二叉树T中,查找给定结点*p在后序序列中的前驱。〔1〕找结点的中序前驱结点BiTNode

*InPre(BiTNode

*p)/*在中序线索二叉树中查找p的中序前驱结点,并用pre指针返回结果*/{if(p->Ltag==1)

pre=p->LChild;

/*直接利用线索*/

else

{/*在p的左子树中查找“最右下端〞结点*/

for(q=p->LChild;q->Rtag==0;q=q->RChild);

pre=q;

}

return(pre);

}〔2〕找结点的中序后继结点BiTNode

*InSucc(BiTNode

*p)/*在中序线索二叉树中查找p的中序后继结点,并用succ指针返回结果*/{if(p->Rtag==1)

succ=p->RChild;

/*直接利用线索*/

else

{/*在p的右子树中查找“最左下端〞结点*/

for(q=p->RChild;q->Ltag==0;q=q->LChild);

succ=q;

}

return(succ);

}(3)找结点的先序后继结点BiTNode

*PreSucc(BiTNode

*p)/*在先序线索二叉树中查找p的先序后继结点,并用succ指针返回结果*/{if(p->Ltag==0)

succ=p->LChild;

else

succ=p->RChild;

return(succ);

}(4)找结点的后序前驱结点BiTNode

*SuccPre(BiTNode

*p)/*在后序线索二叉树中查找p的后序前驱结点,并用pre指针返回结果*/{if(p->Ltag==1)

pre=p->LChild;

else

pre=p->RChild;

return(pre);

}6.21二叉树按照二叉链表方式存储,利用栈的根本操作写出先序遍历非递归形式的算法。【解答】Void

PreOrder(BiTree

root)

/*先序遍历二叉树的非递归算法*/{

InitStack(&S);

p=root;

while(p!=NULL||!IsEmpty(S))

{if(p!=NULL)

{Visit(p->data);push(&S,p);p=p->Lchild;

}else

{

Pop(&S,&p);

p=p->RChild;}}}6.24二叉树按照二叉链表方式存储,编写算法,将二叉树左右子树进展交换。【解答】算法(一)

Void

exchange(BiTree

root){

p=root;

if(p->LChild!=NULL||p->RChild!=NULL)

{

temp=p->LChild;p->LChild=p->RChild;

p->RChild=temp;

exchange(p->LChild);

exchange(p->RChild);

}

}

算法(二)

Void

exchange(BiTree

root){

p=root;

if(p->LChild!=NULL||p->RChild!=NULL)

{

exchange(p->LChild);

exchange(p->RChild);

temp=p->LChild;p->LChild=p->RChild;

p->RChild=temp;

}

}

第六章习题解析1.试分别画出具有3个结点的树和3个结点的二叉树的所有不同形态。2.对题1所得各种形态的二叉树,分别写出前序、中序和后序遍历的序列。3.一棵度为k的树中有n1个度为1的结点,n2个度为2的结点,……,nk个度为k的结点,则该树中有多少个叶子结点[提示]:参考P.116性质3∵n=n0+n1+……+nkB=n1+2n2+3n3+……+knkn=B+1∴

n0+n1+……+nk=n1+2n2+3n3+……+knk+1∴

n0=n2+2n3+……+(k-1)nk+14.假设一棵二叉树的先序序列为EBADCFHGIKJ,中序序列为ABCDEFGHIJK,请画出该二叉树。[提示]:参考P.148

6.二叉树有50个叶子结点,则该二叉树的总结点数至少应有多少个[提示]:[方法1]〔1〕一个叶子结点,总结点数至多有多少个结论:可压缩一度结点。〔2〕满二叉树或完全二叉树具有最少的一度结点〔3〕可能的最大满二叉树是几层有多少叶结点如何增补25<50<26可能的最大满二叉树是6层有25=32个叶结点假设将其中x个变为2度结点后,总叶结点数目为50则:2x+(32–x)=50得:x=18此时总结点数目=(26–1)+18×2[方法2]假设完全二叉树的最大非叶结点编号为m,则最大叶结点编号为2m+1,(2m+1)-m=50m=49总结点数目=2m+1=99[方法3]由性质3:n0=n2+1即:50=n2+1所以:n2=49令n1=0得:n=n0+n2=997.给出满足以下条件的所有二叉树:a)前序和中序一样b)中序和后序一样c)前序和后序一样[提示]:去异存同。a)DLR与LDR的一样点:DR,如果无L,则完全一样,如果无LR,…。b)LDR与LRD的一样点:LD,如果无R,则完全一样。c)DLR与LRD的一样点:D,如果无LR,则完全一样。〔如果去D,则为空树〕7.n个结点的K叉树,假设用具有k个child域的等长链结点存储树的一个结点,则空的Child域有多少个[提示]:参考P.1198.画出与以下序列对应的树T:树的先根次序访问序列为GFKDAIEBCHJ;树的后根次序访问序列为DIAEKFCJHBG。[提示]:〔1〕先画出对应的二叉树〔2〕树的后根序列与对应二叉树的中序序列一样9.假设用于通讯的电文仅由8个字母组成,字母在电文中出现的频率分别为:0.07,0.19,0.02,0.06,0.32,0.03,0.21,0.10〔1〕请为这8个字母设计哈夫曼编码,〔2〕求平均编码长度。10.二叉树采用二叉链表存放,要求返回二叉树T的后序序列中的第一个结点的指针,是否可不用递归且不用栈来完成?请简述原因.[提示]:无右子的“左下端〞11.画出和以下树对应的二叉树:12.二叉树按照二叉链表方式存储,编写算法,计算二叉树中叶子结点的数目。13.编写递归算法:对于二叉树中每一个元素值为x的结点,删去以它为根的子树,并释放相应的空间。[提示]:[方法1]:〔1〕按先序查找;〔2〕超前查看子结点〔3〕按后序释放;voidDelSubTree(BiTree

*bt,

DataTypex){if(*bt!=NULL&&(*bt)->data==x){

FreeTree(*bt);*bt=NULL;}else

DelTree(*bt,

x)voidDelTree(BiTreebt,

DataTypex){if(bt){if(bt->LChild&&bt->LChild->data==x){FreeTree(bt->LChild);bt->LChild=NULL;}if(bt->RChild&&bt->RChild->data==x){FreeTree(bt->RChild);bt->RChild=NULL;}DelTree(bt->LChild,

x);DelTree(bt->RChild,

x);}}[方法2]:〔1〕先序查找;〔2〕直接查看当前根结点〔3〕用指针参数;[方法3]:〔1〕先序查找;〔2〕直接查看当前根结点〔3〕通过函数值,返回删除后结果;〔参例如程序〕14.分别写函数完成:在先序线索二叉树T中,查找给定结点*p在先序序列中的后继。在后序线索二叉树T中,查找给定结点*p在后序序列中的前驱。[提示]:〔1〕先查看线索,无线索时用下面规律:〔2〕结点*p在先序序列中的后继为其左子或右子;〔3〕结点*p在后序序列中的前驱也是其左子或右子。15.分别写出算法,实现在中序线索二叉树中查找给定结点*p在中序序列中的前驱与后继。〔参例题〕16.编写算法,对一棵以孩子-兄弟链表表示的树统计其叶子的个数。[提示]:〔1〕可将孩子-兄弟链表划分为根、首子树、兄弟树,递归处理。〔2〕可利用返回值,或全局变量。17.对以孩子-兄弟链表表示的树编写计算树的深度的算法。18

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论