第6章 树Word下载.docx
- 文档编号:22222884
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:17
- 大小:207.59KB
第6章 树Word下载.docx
《第6章 树Word下载.docx》由会员分享,可在线阅读,更多相关《第6章 树Word下载.docx(17页珍藏版)》请在冰豆网上搜索。
【解析】先序序列是“根左右”,后序序列是“左右根”,若要这两个序列相反,只有单支树,单支树的特点是只有一个叶子结点或高度等于其结点数,故选C。
10.一棵完全二叉树上有1001个结点,其中叶子结点的个数是()
A)250B)500C)505D)以上答案都不对
【答案】D
【解析】若每个结点均已经编号,则最大的编号为1001,其父亲结点的编号为500,那么从501到1001均为叶子结点。
因此,叶子结点数为1001-500=501。
故答案为D。
11.已知一棵二叉树的后序遍历序列为DABEC,中序遍历序列为DEBAC,则它的先序遍历序列为( )
A)ACBEDB)DECABC)DEABCD)CEDBA
【解析】依据后序遍历序列可确定根结点为C;
再依据中序遍历序列可知其左子树由DEBA构成,右子树为空;
又由左子树的后序遍历序列可知其根结点为E,由中序遍历序列可知E的左子树为D,右子树由BA构成,所以求得该二叉树的先序遍历序列为选项D)。
12.若一棵二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点个数是()
A)9B)11C)15D)不确定
13.利用二叉链表存储树时,根结点的右指针是()
A)指向最左孩子B)指向最右孩子C)空D)非空
【解析】利用二叉链表存储树时,即用孩子兄弟链表存储树,根结点的左指针指向其第一子女,根结点的右指针指向其下一兄弟,所以为空。
14.设森林F中有三棵树,第一,第二,第三棵树的结点个数分别为M1,M2和M3。
与森林F对应的二叉树根结点的右子树上的结点个数是()
A)M1B)M1+M2C)M3D)M2+M3
【解析】当森林转化为对应的二叉树时,二叉树的根结点及其左子树是由森林的第一棵树转化而来,二叉树的右子树是由森林的其余树转化而来。
15.若X是中序线索二叉树中一个有左孩子的结点,且X不为根,则X的前驱为( )
A)X的双亲B)X的右子树中最左的结点
C)X的左子树中最右结点D)X的左子树中最右叶结点
16.n个结点的线索二叉树上含有的线索数为()
A)2nB)n-lC)n+lD)n
【解析】线索二叉树是利用二叉树的空链域加上线索,n个结点的二叉树有n+1个空链域。
17.在一棵高度为k的满二叉树中,结点总数为()
A)2k-1B)2kC)2k-1D)log2k+1
18.一棵树高为K的完全二叉树至少有()个结点
A)2k-1B)2k-1-1C)2k-1D)2k
6.2 填空题
1.在二叉树中,指针p所指结点为叶子结点的条件是_____________。
【答案】p->
lchild==NULL&
&
p->
rchlid==NULL
2.深度为H的完全二叉树至少有_____________个结点;
至多有_____________个结点;
H和结点总数N之间的关系是_____________。
【答案】
(1)2H-1
(2)2H-1(3)H=log2N+1
3.一棵有n个结点的满二叉树有_____________个度为1的结点,有_____________个分支(非终端)结点和_____________个叶子,该满二叉树的深度为_____________。
(1)0
(2)(n-1)/2(3)(n+1)/2(4)log2n+1
4.对于一个具有n个结点的二叉树,当它为一棵_____________时,具有最小高度,当它为一棵_____________时,具有最大高度。
(1)完全二叉树
(2)单支树,树中任一结点(除最后一个结点是叶子外),只有左子女或只有右子女。
5.在一棵二叉树中,度为0的结点的个数为N0,度为2的结点的个数为N2,则有N0=_____________
【答案】N2+1
6.已知二叉树有50个叶子结点,则该二叉树的总结点数至少是_____________。
【答案】99
【解析】在二叉树中,N0=N2+1,所以,有50个叶子结点的二叉树,有49个度为2的结点。
若要使该二叉树的结点数最少,度为1的结点应为0个,即总结点数N=N0+N1+N2=99。
7.具有n个结点的满二叉树,其叶结点的个数是_____________。
(n+1)/2
8.每一棵树都能惟一的转换为它所对应的二叉树。
若已知一棵二叉树的先序序列是BEFCGDH,中序序列是FEBGCHD,则它的后序序列是_____________。
设上述二叉树是由某森林转换而成,则其第一棵的先根次序序列是_____________。
(1)FEGHDCB
(2)BEF(该二叉树转换成森林,含三棵树,其第一棵树的先根次序是BEF)
9.已知一棵二叉树的先序序列为ABDECFHG,中序序列为DBEAHFCG,则该二叉树的根为_____________,左子树中有_____________,右子树中有_____________。
(1)A
(2)DBE(3)HFCG
10.先根次序周游树林正好等同于按_____________周游对应的二叉树;
后根次序周游树林正好等同于_____________周游对应的二叉树。
(1)先根次序
(2)中根次序
11.一个深度为k的,具有最少结点数的完全二叉树按层次,(同层次从左到右)用自然数依此对结点编号,则编号最小的叶子的序号是_____________;
编号是i的结点所在的层次号是_____________(根所在的层次号规定为1层)。
(1)2k-2+1
(2)log2i+1
【解析】第k层1个结点,总结点个数是2k-1,其双亲是2k-1/2=2k-2。
12.某二叉树有20个叶子结点,有30个结点仅有一个孩子,则该二叉树的总结点数为_____________。
【答案】69
【解析】在二叉树中,N0=N2+1,所以,有20个叶子结点的二叉树,有19个度为2的结点。
又已知该二叉树中度为1的结点有30个,则总结点数N=N0+N1+N2=69。
13.有数据WG={7,19,2,6,32,3,21,10},则所建Huffman树的树高是_____________,带权路径长度WPL为_____________。
(1)6
(2)261
14.有一份电文中共使用6个字符:
a,b,c,d,e,f,它们的出现频率依次为2,3,4,7,8,9,试构造一棵哈夫曼树,则其加权路径长度WPL为_____________,字符c的编码是_____________。
(1)80
(2)001(不惟一)
15.具有N个结点的二叉树,采用二叉链表存储,共有_____________个空链域。
【答案】N+1
【解析】在二叉树中,N=N0+N1+N2,N0=N2+1,空分支数为2N0+N1=N0+N1+(N2+1)=N+1。
16.8层完全二叉树至少有_____________个结点,拥有100个结点的完全二叉树的最大层数为_____________。
(1)128(第7层满,加第8层1个)
(2)7
17.一棵树T中,包括一个度为1的结点,两个度为2的结点,三个度为3的结点,四个度为4的结点和若干叶子结点,则T的叶结点数为_____________。
【答案】21
【解析】已知该树中结点数和分支数的关系分别如下:
N=N0+N1+N2+N3+N4
(1)
N-1=N1+2N2+3N3+4N4
(2)
由
(2)式求得N=(1+2*2+3*3+4*4)+1=31,再由
(1)式求得N0=21。
18.n(n大于1)个结点的各棵树中,其深度最小的那棵树的深度是_____________。
它共有_____________个叶子结点和_____________个非叶子结点,其中深度最大的那棵树的深度是_____________,它共有_____________个叶子结点和_____________个非叶子结点。
(1)2
(2)n-1(3)1(4)n(5)1(6)n-1
19.设y指向中序二叉线索树的一叶子,x指向一待插入结点,现x作为y的左孩子插入,树中标志域为ltag和rtag,并规定标志为1是线索,则下面的一段算法将x插入并修改相应的线索,试补充完整:
(lchild,rchild分别代表左,右孩子)
x->
ltag=_____________;
lchild=_____________;
y->
rtag=_____________;
rchild=_____________;
if(x->
lchild!
=NULL)&
(x->
lchild->
rtag==1)x->
rchild=_____________;
(1)1
(2)y->
lchild(3)0(4)x
(5)1(6)y(7)x
6.3 判断题
1.二叉树是度为2的有序树()
【答案】×
2.完全二叉树一定存在度为1的结点()
3.深度为K的二叉树中结点总数≤2k-1()
【答案】√
4.由一棵二叉树的先序序列和后序序列可以惟一确定它()
5.完全二叉树中,若一个结点没有左孩子,则它必是树叶()
6.用二叉链表存储n个结点的二叉树时,结点的2n个指针中有n+1个空指针()
7.完全二叉树的存储结构通常采用顺序存储结构()
8.哈夫曼树是带权路径长度最短的树,路径上权值较大的结点离根较近()
9.在中序线索二叉树中,每一非空的线索均指向其祖先结点()
【解析】在二叉树上,对有左右子女的结点,其中序前驱是其左子树上按中序遍历的最右边的结点(该结点的后继指针指向祖先),中序后继是其右子树上按中序遍历的最左边的结点(该结点的前驱指针指向祖先)。
10.二叉树中序线索化后,不存在空指针域()
【解析】非空二叉树中序遍历第一个结点无前驱,最后一个结点无后继,这两个结点的前驱线索和后继线索为空指针。
6.4 应用题
1.从概念上讲,树,森林和二叉树是三种不同的数据结构,将树,森林转化为二叉树的基本目的是什么,并指出树和二叉树的主要区别。
【答案】树的孩子兄弟链表表示法和二叉树二叉链表表示法,本质是一样的,只是解释不同,也就是说树(树是森林的特例,即森林中只有一棵树的特殊情况)可用二叉树惟一表示,并可使用二叉树的一些算法去解决树和森林中的问题。
树和二叉树的区别有3:
一是二叉树的度至多为2,树无此限制;
二是二叉树有左右子树之分,即使在只有一个分支的情况下,也必须指出是左子树还是右子树,树无此限制;
三是二叉树允许为空,树一般不允许为空(个别书上允许为空)。
2.若在内存中存放一个完全二叉树,在二叉树上只进行下面两个操作:
(1)寻找某个结点双亲;
(2)寻找某个结点的子女;
请问应该用何种结构来存储该二叉树?
【答案】用顺序存储结构存储n个结点的完全二叉树。
编号为i的结点,其双亲编号是i/2(i=1时无双亲),其左子女是2i(若2i≤n,否则i无左子女),右子女是2i+1(若2i+1≤n,否则无右子女)。
3.求含有n个结点、采用顺序存储结构的完全二叉树中的序号最小的叶子结点的下标。
要求写出简要步骤。
【答案】根据完全二叉树的性质,最后一个结点(编号为n)的双亲结点的编号是n/2,这是最后一个分支结点,在它之后是第一个终端(叶子)结点,故序号最小的叶子结点的下标是n/2+1。
4.试证明,同一棵二叉树的所有叶子结点,在先序序列、中序序列以及后序序列中都按相同的相对位置出现(即先后顺序相同),例如先序abc,后序bca,中序bac。
【答案】先序遍历是“根左右”,中序遍历是“左根右”,后序遍历是“左右根”。
三种遍历中只是访问“根”结点的时机不同,对左右子树均是按左右顺序来遍历的,因此所有叶子都按相同的相对位置出现。
5.试找出满足下列条件的二叉树:
1)先序序列与后序序列相同;
2)中序序列与后序序列相同;
3)先序序列与中序序列相同;
4)中序序列与层次序列相同;
【答案】先序遍历二叉树的顺序是“根—左子树—右子树”,中序遍历“左子树—根—右子树”,后序遍历顺序是:
“左子树—右子树―根”,根据以上原则,解答如下:
1)若先序序列与后序序列相同,则或为空树,或为只有根结点的二叉树。
2)若中序序列与后序序列相同,则或为空树,或为任一结点至多只有左子树的二叉树。
(3)若先序序列与中序序列相同,则或为空树,或为任一结点至多只有右子树的二叉树。
(4)若中序序列与层次遍历序列相同,则或为空树,或为任一结点至多只有右子树的二叉树
6.已知一棵二叉树的中序序列和后序序列分别为GLDHBEIACJFK和LGHDIEBJKFCA
(1)给出这棵二叉树;
(2)转换为对应的森林。
7.一棵非空二叉树其先序序列和后序序列正好相反,画出二叉树的形状。
【答案】先序序列是“根左右”后序序列是“左右根”,可见对任意结点,若至多只有左子女或至多只有右子女,均可使先序序列与后序序列相反,图示如下:
8.假设一棵二叉树的层次次序(按层次递增顺序排列,同一层次自左向右)为ABECFGDHI,中序序列为BCDAFEHIG。
请画出该二叉树,并将其转换为对应的森林。
【答案】按层次遍历,第一个结点(若树不空)为根,该结点在中序序列中把序列分成左右两部分:
左子树和右子树。
若左子树不空,层次序列中第二个结点为左子树的根;
若右子树为空,则层次序列中第三个结点为右子树的根。
对右子树也作类似的分析。
层次序列的特点是,从左到右每个结点或是当前情况下子树的根或是叶子。
9.已知一个森林的先序序列和后序序列如下,请构造出该森林。
先序序列:
ABCDEFGHIJKLMNO
后序序列:
CDEBFHIJGAMLONK
【答案】森林的先序序列和后序序列对应其转换的二叉树的先序序列和中序序列,应先据此构造二叉树,再构造出森林。
10.一棵二叉树的先序、中序、后序序列如下,其中一部分未标出,请构造出该二叉树。
先序序列:
__CDE_GHI_K
中序序列:
CB__FA_JKIG
后序序列:
_EFDB_JIH_A
11.设有正文AADBAACACCDACACAAD,字符集为A,B,C,D,设计一套二进制编码,使得上述正文的编码最短。
【答案】字符A,B,C,D出现的次数为9,1,5,3。
其哈夫曼编码如下:
A:
1,B:
000,C:
01,D:
001。
12.已知下列字符A、B、C、D、E、F、G的权值分别为3、12、7、4、2、8,11,试填写出其对应哈夫曼树HT的存储结构的初态和终态。
6.5 算法设计题
1.已知一棵二叉树按顺序方式存储在数组A[1..n]中。
设计算法,求出下标分别为i和j的两个结点的最近的公共祖先结点的值。
【算法分析】
二叉树顺序存储,是按完全二叉树的格式存储,利用完全二叉树双亲结点与子女结点编号间的关系,求下标为i和j的两结点的双亲,双亲的双亲…等等,直至找到最近的公共祖先。
【算法源代码】
typedefintElemType;
voidAncestor(ElemTypeA[],intn,inti,intj)
{while(i!
=j)
if(i>
j)i=i/2;
/*下标为i的结点的双亲结点的下标*/
elsej=j/2;
/*下标为j的结点的双亲结点的下标*/
printf("
所查结点的最近公共祖先的下标是%d,值是%d"
i,A[i]);
}/*Ancestor*/
2.编程求以孩子兄弟表示法存储的森林的叶子结点数,要求描述结构。
当森林(树)以孩子兄弟表示法存储时,若结点没有左子树(fch=NULL),则它必是叶子,否则,总的叶子结点个数是左子树(fch)上的叶子数和右子树(nsib)上叶结点个数之和。
typedefstructnode{
ElemTypedata;
/*数据域*/
structnode*fch,*nsib;
/*孩子与兄弟域*/
}*Tree;
intLeaves(Treet){/*计算以孩子-兄弟表示法存储的森林的叶子数*/
if(t)
if(t->
fch==NULL)/*若结点无孩子,则该结点必是叶子*/
return(1+Leaves(t->
nsib));
else
return(Leaves(t->
fch)+Leaves(t->
}/*结束Leaves*/
3.假定用两个一维数组L[N]和R[N]作为有N个结点1,2,…,N的二叉树的存储结构。
L[i]和R[i]分别指示结点i的左子女和右子女;
L[i]=0(R[i]=0)表示i的左(右)子女为空。
设计一个算法,由L和R建立一个一维数组T[n],使T[i]存放结点i的父亲;
然后再写一个判别结点U是否为结点V的后代的算法。
由指示结点i左子女和右子女的两个一维数组L[i]和R[i],很容易建立指示结点i的双亲的一维数组T[i],根据T数组,判断结点U是否是结点V后代的算法,转为判断结点V是否是结点U的祖先的问题。
intgeneration(intu,intv,intn,intl[],intr[],intt[]){
/*l[]和r[]是含有n个元素且指示二叉树结点i左子女和右子女的一维数组本算法据此建立结点i的双亲数组t,并判断结点u是否是结点v的后代*/
intparent,i;
for(i=1;
i<
=n;
i++)t[i]=0;
/*t数组初始化*/
for(i=1;
i++){/*根据l和r填写t*/
if(l[i]!
=0)t[l[i]]=i;
/*若结点i的左子女是l,则结点l的双亲是结点i*/
if(r[i]!
=0)t[r[i]]=i;
/*i的右子女是r,则r的双亲是i*/
parent=u;
/*判断u是否是v的后代*/
while(parent!
=v&
parent!
=0)parent=t[parent];
if(parent==v)
{printf("
结点u是结点v的后代"
);
return
(1);
}
else
{printf("
结点u不是结点v的后代"
return(0);
}
}/*结束generation*/
4.要求二叉树按二叉链表形式存储:
(1)写一个建立二叉树的算法。
(2)写一个判别给定的二叉树是否是完全二叉树的算法。
二叉树是递归定义的,以递归方式建立最简单。
判定是否是完全二叉树,可以使用队列,在遍历中利用完全二叉树“若某结点无左子女就不应有右子女”的原则进行判断。
BiTreeCreat(){/*建立二叉树的二叉链表形式的存储结构*/
ElemTypex;
BiTreebt;
scanf("
%d"
&
x);
if(x==0)bt=NULL;
elseif(x>
0)
{bt=(BiTNode*)malloc(sizeof(BiTNode));
bt->
data=x;
lchild=creat();
rchild=creat();
return(bt);
}/*结束creat*/
intJudgeComplete(BiTreebt){
/*判断二叉树是否是完全二叉树,如是,返回1,否则,返回0*/
inttag=0;
BiTreep=bt,Q[50];
/*Q是队列,元素是二叉树结点指针,容量足够大*/
if(p==NULL)return1;
QueueInit(Q);
QueueIn(Q,p);
/*初始化队列,根结点指针入队*/
while(!
QueueEmpty(Q)){
p=QueueOut(Q);
if(p->
lchild&
!
tag)QueueIn(Q,p->
lchild);
/*左子女入队*/
elseif(p->
lchild)return0;
/*前边已有结点为空,本结点不空*/
elsetag=1;
/*首次出现结点为空*/
rchild&
rchild);
/*右子女入队*/
rchild)return0;
}/*while*/
return1;
}/*JudgeComplete*/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第6章