第六章树和二叉树习题数据结构.docx
- 文档编号:23079134
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:24
- 大小:53.34KB
第六章树和二叉树习题数据结构.docx
《第六章树和二叉树习题数据结构.docx》由会员分享,可在线阅读,更多相关《第六章树和二叉树习题数据结构.docx(24页珍藏版)》请在冰豆网上搜索。
第六章树和二叉树习题数据结构
习题六树和二叉树
一、单项选择题)(
1.以下说法错误的是
.树形结构的特点是一个结点可以有多个直接前趋A
.线性结构中的一个结点至多只有一个直接后继B
.树形结构可以表达C更复杂的数据)(组织
结构分支层次D.树(及一切树形结构)是一种
.任何只含一个结点的集合是一棵树E
)2.下列说法中正确的是(
.任何一棵二叉树中至少有一个结点的度为A2
.任何一棵二叉树中每个结点的度都为B2
.任何一棵二叉树中的度肯定等于C2
.任何一棵二叉树中的度可以小于D2
)3.讨论树、森林和二叉树的关系,目的是为了(
.借助二叉树上的运算方法去实现对树的一些运算A
.将树、森林按二叉树的存储方式进行存储B
.将树、森林转换成二叉树C
.体现一种技巧,没有什么实际意义D)(4.树最适合用来表示BA.有序数据元素.无序数据元素DC.元素之间具有分支层次关系的数据.元素之间无联系的数据(则度为0的结点个数是个度为5.若一棵二叉树具有102的结点,5个度为1的结点,)D9A.B.11C15..不确定中有三棵树,第一,第二,第三棵树的结点个数分别为F6.设森林。
与森林,M3M2和M1F
)。
对应的二叉树根结点的右子树上的结点个数是(
DCM1+M2M3.A.M1B.M2+M3.
.一棵完全二叉树上有7)1001个结点,其中叶子结点的个数是(
E505..CA.250B254D.以上答案都不对.500
()
8.设给定权值总数有n个,其哈夫曼树的结点总数为
2n-1.2n+1.2n.A.不确定CDB
I9.二叉树的第)层上最多含有结点数为(
2III-1.2..A.22-1-1CDBI-1
(),或为h,.一棵二叉树高度为10所有结点的度或为02,则这棵二叉树最少有结点
h+1.2hA.2h+1..2h-1CDB
利用二叉链表存储树,则根结点的右指针是(11.)。
D.空A.指向最左孩子.非空.指向最右孩子CB
)14.在二叉树结点的先序序列,中序序列和后序序列中,所有叶子结点的先后顺序(
BA.都不相同.完全相同
DC.先序和中序相同,而与后序不同.中序和后序相同,而与先序不同
.在完全二叉树中,若一个结点是叶结点,则它没(15)。
BA.左子结点.右子结点
D.左子结点和右子结点C.左子结点,右子结点和兄弟结点
16.在下列情况中,可称为二叉树的是()
.每个结点至多有两棵子树的树A
B.哈夫曼树
.每个结点至多有两棵子树的有序树C
每个结点只有一棵右子树D.
.以上答案都不对E)17.(一棵左右子树均不空的二叉树在先序线索化后,其中空的链域的个数是:
。
A.0B.1C.2D.不确定18.)引入二叉线索树的目的是(
A.加快查找结点的前驱或后继的速度B.为了能在二叉树中方便的进行插入与删除.为了能方便的找到双亲CD.使二叉树的遍历结果唯一个结点的线索二叉树上含有的线索数为(.n19)
DA.2nB.n-.nlCl.n+
21.下面几个符号串编码集合中,不是前缀编码的是()。
A.B{0,10,110,1111}.{11,10,001,101,0001}
{00,010,0110,1000}CD..{b,c,aa,ac,aba,abb,abc}
22.一棵有n个结点的二叉树,按层次从上到下,同一层从左到右顺序存储在一维数组
A中的开始用上述方法编号)的右孩子在数组从1i个结点(iA[1..n]中,则二叉树中第
)位置是(
A.BA[2i](2i<=n)A[2i+1](2i+1<=n).D.CA[i-2].条件不充分,无法确定
()、以下说法错误的是23
A.哈夫曼树是带权路径长度最短的树,路径上权值较大的结点离根较近。
B.若一个二叉树的树叶是某子树的中序遍历序列中的第一个结点,则它必是该子树的后序遍历序列中的第一个结点。
C.已知二叉树的前序遍历和后序遍历序列并不能惟一地确定这棵树,因为不知道树的
根结点是哪一个。
D.在前序遍历二叉树的序列中,任何结点的子树的所有结点都是直接跟在该结点的之
后。
二、判断题(在各题后填写“√”或“×”)
)1的结点。
(
完全二叉树一定存在度为1.
lognN个结点的二叉树,其高度为。
()2.对于有23.()二叉树的遍历只是为了在应用中找到一种线性次序。
4.一棵一般树的结点的前序遍历和后序遍历分别与它相应二叉树的结点前序遍历和后序遍历是一致的。
()
5.用一维数组存储二叉树时,总是以前序遍历顺序存储结点。
()
6.中序遍历一棵二叉排序树的结点就可得到排好序的结点序列。
()
)7.完全二叉树中,若一个结点没有左孩子,则它必是树叶。
(
()
二叉树只能用二叉链表表示。
8.
()9.给定一棵树,可以找到唯一的一棵二叉树与之对应。
个空存储包含n个结点的二叉树,结点的(llink-rlink)用链表10.2n个指针区域中有n-1
)指针。
(
11(.树形结构中元素之间存在一个对多个的关系。
)
12.将一棵树转成二叉树,根结点没有左子树。
()
(13.度为二的树就是二叉树。
)
14.二叉树中序线索化后,不存在空指针域。
()
()15.霍夫曼树的结点个数不能是偶数。
16.哈夫曼树是带权路径长度最短的树,路径上权值较大的结点离根较近。
()
三、填空题
1.在二叉树中,指针p所指结点为叶子结点的条件是。
______
个结点,至多有2.深度为k的完全二叉树至少有___个结点。
___________
______个叶子结点。
3.高度为8的完全二叉树至少有
4.具有n个结点的二叉树中,一共有________个指针域,其中只有________个用来指向结点的左右孩子,其余的________个指针域为NULL。
5.树的主要遍历方法有________、________、________等三种。
6.一个深度为k的,具有最少结点数的完全二叉树按层次,(同层次从左到右)用自然数依;
___此对结点编号,则编号最小的叶子的序号是编号是i的结点所在的层次号
(根所在的层次号规定为__是_层)。
1
7.如果结点A有3个兄弟,而且B是A的双亲,则B的度是______。
______。
8.二叉树的先序序列和中序序列相同的条件是
9.一个无序序列可以通过构造一棵______树而变成一个有序序列,构造树的过程即为对无序序列进行排序的过程。
则它必是该子树.若一个二叉树的叶子结点是某子树的中序遍历序列中的最后一个结点,10
序列中的最后一个结点。
的______
______。
作为叶子结点的权值构造哈夫曼树,则其带权路径长度是8},7,,11.若以{4,56
12.以下程序段采用先根遍历方法求二叉树的叶子数,请在横线处填充适当的语句。
Voidcountleaf(bitreptrt,int*count)/*根指针为t,假定叶子数count的初值为
0*/
{if(t!
=NULL){if((t->lchild==NULL)&&(t->rchild==NULL))________;
countleaf(t->lchild,&count);
________}
}
13.以下程序是二叉链表树中序遍历的非递归算法,请填空使之完善。
二叉树链表的结点类
型的定义如下:
/*Ctypedefstructnode/语言
{chardata;structnode*lchild,*rchild;}*bitree;/*bt为根结点的指针voidvst(bitreebt)*/
初始化栈s为空栈/**/{bitreep;p=bt;initstack(s);
/*while(p||!
empty(s))栈s不为空*//*Pif(p){push(s,p);
(1)___;}
入栈*/
“%c”,p->data);
(2)____;}/*else{p=pop(s);printf(栈顶元素出栈*/}
14.二叉树存储结构同上题,以下程序为求二叉树深度的递归算法,请填空完善之。
intdepth(bitreebt)/*bt为根结点的指针*/
{inthl,hr;__);if(bt==NULL)return(
(1)_
hl=depth(bt->lchild);hr=depth(bt->rchild);
;__)(3)_if(
(2)_____
return(hr+1);}
15.将二叉树bt中每一个结点的左右子树互换的C语言算法如下,其中
ADDQ(Q,bt),DELQ(Q),EMPTY(Q)分别为进队,出队和判别队列是否为空的函数,请填写算法中得空白处,完成其功能。
typedefstructnode{intdata;structnode*lchild,*rchild;}btnode;
voidEXCHANGE(btnode*bt)
{btnode*p,*q;
if(bt){ADDQ(Q,bt);
while(!
EMPTY(Q)){p=DELQ(Q);q=
(1)___;p->rchild=
(2)_
__;(3)___=q;
__;__;if(p->rchild)(5)_if(p->lchild)(4)_
}
}}//
四、应用题
1.树和二叉树之间有什么样的区别与联系?
2.分别画出具有3个结点的树和3个结点的二叉树的所有不同形态。
3.分别给出下图所示二叉树的先根、中根和后根序列。
4.一个深度为L的满K叉树有以下性质:
第L层上的结点都是叶子结点,其余各层上每个
1K棵非空子树,如果按层次顺序从开始对全部结点进行编号,求:
结点都有
)各层的结点的数目是多少?
1
2)编号为n的结点的双亲结点(若存在)的编号是多少?
i3)编号为n的结点的第个孩子结点(若存在)的编号是多少?
4)编号为n的结点有右兄弟的条件是什么?
如果有,其右兄弟的编号是多少?
请给出计算和推导过程。
5.将下列由三棵树组成的森林转换为二叉树。
(只要求给出转换结果)
DG
AJEHICBKMLNOF
P:
的存储结构如下BT6.设二叉树
45678213910
7005Lchild8010213
IAHGJBFDataCDE
0400090000Rchild
其中BT为树根结点的指针,其值为6,Lchild,Rchild分别为结点的左、右孩子指针域,data
为结点的数据域。
试完成下列各题:
(l)画出二叉树BT的逻辑结构;
(3)画出二叉树的后序线索树。
五、算法设计题
1.要求二叉树按二叉链表形式存储,
(1)写一个建立二叉树的算法。
)写一个判别给定的二叉树是否是完全二叉树的算法。
(2K的满二个结点的二叉树的每个结点都与深度为叉K,具有N完全二叉树定义为:
深度为的结点一一对应。
此题以此定义为准。
至N树中编号从12.设一棵二叉树的结点结构为(LLINK,INFO,RLINK),ROOT为指向该二叉树根结点的指针,p和
),p,q,rANCESTORq分别为指向该二叉树中任意两个结点的指针,试编写一算法(ROOT,
该算法找到p和q的最近共同祖先结点r。
3.有一二叉链表,试编写按层次顺序遍历二叉树的算法。
4.已知二叉树按照二叉链表方式存储,利用栈的基本操作写出先序遍历非递归形式的算法。
.对于二叉树的链接实现5,完成非递归的中序遍历过程。
6.试写出复制一棵二叉树的算法。
二叉树采用标准链接结构。
。
7.请设计一个算法,要求该算法把二叉树的叶子结点按从左到右的顺序连成一个单链表,表头指针为head。
二叉树按二叉链表方式存储,链接时用叶子结点的右指针域来存放单链表指针。
分析你的算法的时、空复杂度。
8.已知二叉树以二叉链表存储,编写算法完成:
对于树中每一个元素值为x的结点,删去
以它为根的子树,并释放相应的空间。
9.设一棵二叉树的根结点指针为T,C为计数变量,初值为0,试写出对此二叉树中结点计数的算法:
BTLC(T,C)。
10.分别写出算法,实现在中序线索二叉树T中查找给定结点*p在中序序列中的前驱与后T在先序序列中的后继。
在后序线索二叉树中,查找给定结点T继。
在先序线索二叉树*p在后序序列中的前驱。
*p中,查找给定结点
和二叉树树第六章
一、单项选择题1.A2.D
A3.
C.4
B5.
D.6
E7.D8.
C9.
B10.
C11.
A12.
D.13
B14.
C.15B16.B17.
A18.
C.19
D.20
B21.D22.
C
23.
)二、判断题(在各题后填写“√”或“×”
×1的结点。
完全二叉树一定存在度为1.
。
×nlog对于有N个结点的二叉树,其高度为2.2二叉树的遍历只是为了在应用中找到一种线性次序。
√3.
一棵一般树的结点的前序遍历和后序遍历分别与它相应二叉树的结点前序遍历和后序遍4.
历是一致的。
×
用一维数组存储二叉树时,总是以前序遍历顺序存储结点。
×5.
√6.中序遍历一棵二叉排序树的结点就可得到排好序的结点序列
.完全二叉树中,若一个结点没有左孩子,则它必是树叶。
7√
×二叉树只能用二叉链表表示。
8.
√给定一棵树,可以找到唯一的一棵二叉树与之对应。
9.
n-1个空2nn存储包含用链表(llink-rlink)个结点的二叉树,结点的个指针区域中有10.
×指针。
.树形结构中元素之间存在一个对多个的关系。
11√
.将一棵树转成二叉树,根结点没有左子树。
12×
×.度为二的树就是二叉树。
13
×二叉树中序线索化后,不存在空指针域。
14.
15.霍夫曼树的结点个数不能是偶数。
√
√16.哈夫曼树是带权路径长度最短的树,路径上权值较大的结点离根较近。
三、填空题
1.p->lchild==null&&p->rchlid==null2.
(1)2k-1
(2)2k-1
3.64
n+14.2nn-1
先序遍历5.后序遍历中序遍历
6..
(1)2k-2+1(第k层1个结点,总结点个数是2H-1,其双亲是2H-1/2=2k-2)
(2)log2i+1
47.8.任何结点至多只有右子女的二叉树。
9.二叉排序树
10.前序
11.69
12.*count++,countleaf(l->rchile,count)
(2)p=p->rchild
(1)p=p->lchild//13.沿左子树向下
(1)014.
(2)hl>hr(3)hr=hl
15.
(1)p->rchild
(2)p->lchild(3)p->lchild(4)ADDQ(Q,p->lchild)(5)ADDQ(Q,p->rchild)四、应用题
1.树和二叉树逻辑上都是树形结构,树和二叉树的区别有三:
一是二叉树的度至多为2,
也必须指出是树无此限制;二是二叉树有左右子树之分,即使在只有一个分枝的情况下,
左子树还是右子树,树无此限制;三是二叉树允许为空,树一般不允许为空(个别书上允许
为空)。
二叉树不是树的特例。
.【解答】2个结点的二叉树3个结点的树3具有具有
3.解答:
先根序列:
ABCDEFGHIJ;
BCDAFEHJIG;中根序列:
DCBFJIHGEA后根序列:
。
h-14.
(1)k(h为层数)
h-1个结点,从根开始编号为1,则结点i
(2)因为该树每层上均有K的从右向左数第2个
孩子的结点编号为ki。
设n为结点i的子女,则关系式(i-1)k+2<=n<=ik+1成立,因i是
。
整数,故结点的编号为n-2)/k+1n的双亲i
),故结点(3)n(其最右边子女编号是n-1的前一结点编号为结点n(n>1)(n-1)*k+1的
。
(n-1)*k+1+i个孩子的编号是i第
(4)根据以上分析,结点n有右兄弟的条件是,它不是双亲的从右数的第一子女,即
(n-1)%k!
=0,其右兄弟编号是n+1。
5.A
DB
EG
CH
FIKOJLM
PN
O
6.(l)图略;
(2)前序序列:
ABCEDFHGIJ
ECBHFDJIGA中序序列:
ECHFJIGDBA后序序列:
(3)图略。
7.字符A,B,C,D出现的次数为9,1,5,3。
其哈夫曼编码如下A:
1,B:
000,C:
01,D:
001
10
90
1
5
01
13
五、算法设计题
1.[题目分析]二叉树是递归定义的,以递归方式建立最简单。
判定是否是完全二叉树,可
以使用队列,在遍历中利用完全二叉树“若某结点无左子女就不应有右子女”的原则进行判断。
BiTreeCreat()//建立二叉树的二叉链表形式的存储结构
{ElemTypex;BiTreebt;
scanf(“%d”,&x);//本题假定结点数据域为整型
if(x==0)bt=null;
elseif(x>0)
{bt=(BiNode*)malloc(sizeof(BiNode));bt->data=x;bt->lchild=creat();bt->rchild=creat();
}
;error(else“输入错误”)
return(bt);
}//结束BiTree
intJudgeComplete(BiTreebt)//判断二叉树是否是完全二叉树,如是,返回1,否
则,返回0{inttag=0;BiTreep=bt,Q[];//Q是队列,元素是二叉树结点指针,容量
足够大
(1);if(p==null)returnQueueInit(Q);QueueIn(Q,p);//初始化队列,根结点指针入队
(!
QueueEmpty(Q))while
出队//{p=QueueOut(Q);
左子女入队if(p->lchild&&!
tag)QueueIn(Q,p->lchild);//
前边已有结点为空,{if(p->lchild)else0;//return
本结点不空
首次出现结点为空elsetag=1;//
右子女入队if(p->rchild&&!
tag)QueueIn(Q,p->rchild);//
returnelsetag=1;if(p->rchild)0;else
}//while1;}//JudgeCompletereturn[算法讨论]完全二叉树证明还有其它方法。
判断时易犯的错误是证明其左子树和右子数
都是完全二叉树,由此推出整棵二叉树必是完全二叉树的错误结论。
2.[题目分析]后序遍历最后访问根结点,即在递归算法中,根是压在栈底的。
采用后序非递
归算法,栈中存放二叉树结点的指针,当访问到某结点时,栈中所有元素均为该结点的祖先。
的左边。
后序遍历必然先遍本题要找p和q的最近共同祖先结点r,不失一般性,设在qp
历到结点p,栈中元素均为pq时,将的祖先。
将栈拷入另一辅助栈中。
再继续遍历到结点
栈中元素从栈顶开始逐个到辅助栈中去匹配,第一个匹配p和q(即相等)的元素就是结点
的最近公共祖先。
typedefstruct{BiTreet;tag;//tag=0tag=1int表示结点的右子女已表示结点的左子女已被访问,
被访问}stack;stacks[],s1[];//栈,容量够大
BiTreeAncestor(BiTreeROOT,p,q,r)//求二叉树上结点p和q的最近的共同祖先结点r。
{top=0;bt=ROOT;while(bt!
=null||top>0)
//{while(bt!
=null&&bt!
=p&&bt!
=q)结点入栈{s[++top].t=bt;s[top].tag=0;bt=bt->lchild;}//沿左分枝向下
p在qif(bt==p)//不失一般性,假定的左侧,遇结点p时,栈中元素均为p的祖先结
点s1{for(i=1;i<=top;i++)s1[i]=s[i];top1=top;}//的元素转入辅助栈s将栈保
存qif(bt==q)//找到结点。
s1for(i=top;i>0;i--)//去匹配;将栈中元素的树结点到
{pp=s[i].t;
for(j=top1;j>0;j--){printf((pp);}if(s1[j].t==pp)return;)的最近共同的祖先已找到”qp“和
}while(top!
=0&&s[top].tag==1)top--;//退栈(top!
=0)ifs[top].tag=1;bt=s[top].t->rchild;{//}沿右分枝向下遍历
while(bt!
=null||top>0)}//结束
(null);//return无公共祖先q、p
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第六 二叉 习题 数据结构