第6章测试题.docx
- 文档编号:4130515
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:14
- 大小:226.67KB
第6章测试题.docx
《第6章测试题.docx》由会员分享,可在线阅读,更多相关《第6章测试题.docx(14页珍藏版)》请在冰豆网上搜索。
第6章测试题
4+2+1+1+X便可以得到等式:
一、选择题
1.
设树的度为4,其中度为1,2,3,4的结点个数分别为4,2,1,1,则树中的叶子数为
)。
5B.6C.7D.8
(公
叶子的度数为0;设叶子数为X,则此树的总节点数为1*4+2*2+3*1+4*1+1=16
式:
节点数=分叉数+1,由图形便可以观察出来);又根据题目可以知道节点数目还可以列出一个式子:
4+2+1+1+x=16;所以x=8,即叶子数为8。
2.在下述结论中,正确的是(D)。
1只有一个结点的二叉树的度为0
2二叉树的度为2
3二叉树的左右子树可以任意交换
4
深度为K的完全二叉树的结点个数小于或等于深度相同的满二叉树A.①②③B.②③④
3.设森林F对应的二叉树为
A.m-n
C.n+1
B.m-n-1
D.无法确定
4.若一棵二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点个数是(B)。
解答:
度为0的结点=度为2的结点+1
5.
一棵完全二叉树上有1001个结点,其中叶子结点的个数(D)。
A.500
B.254
解答:
1023是满二叉树,有512片叶子。
1001比1023少22个结
点,所以有512-22+22/2=501片叶子。
511是满二叉树,有256片叶子。
1001比511多490个结点,所以
有256+490-(490+1)/2=501片叶子。
6.
)。
设给定权值总数有n个,其哈夫曼树的结点总数为(D
A.不确定B.2n+1
C.2n
D.2n-1
解答:
(1)哈夫曼树没有度为
1的结点.
(2)且权值所在结点
都是叶子.(3)二叉树中度为
2的结点数比叶结点少1
7•—棵二叉树高度为h,所有结点的度为
0或2,则这棵树最少有(B)个结点。
A•2h
B•2h-1
C.2h+1
D•h+1
&在一棵高度为k的满二叉树中,结点总数为(
C)
A•2k"1
B•2k
C.2k-1
D•log2k1
9•树的后根序遍历等同于该树对应的二叉树的(
B)。
A.先序序列
二、填空题
1•二叉树由根节点
左子树
右子树
三个基本单元组成。
2•树在计算机内的表示方式有_双亲表示法、孩子表示法
、孩子兄弟表
示法。
3•在二叉树中,指针P所指结点为叶子结点的条件是
_p->lchild==null&&
p->rchlid二二null
4•二叉树中某一结点左子树的深度减去右子树的深度称为该结点的
平衡因子
5•具有256个结点的完全二叉树的深度为
6.已知一棵度为3的树有2个度为1的结点,3个度为2的结点,
4个度为3的结点,则该
树有12
个叶子结点。
个结点。
7•深度为k的二叉树至少有2k-1个结点,至多有2k-1
&深度为H的完全二叉树至少有—
个结点,至多有2已1
结点,H和结点总数N之间的关系是H=nog2N]+1_向下取整
Iog2i=log2j
9°在完全二叉树中,编号为i和j的两个结点处于同一层的条件是
用顺序存储二叉树时,要按完全二叉树的形式存储,非完全二叉树存储时,要加
“虚结点”。
设编号为i和j的结点在顺序存储中的下标为s和t,则结点i和j在同一层上的条件是Iog2s=log2t。
三、判断题
1.二叉树是度为2的有序树。
一棵度为二的有序树与一棵二叉树的区别在于:
有序树的结点次序是相对于另一结点而言的,如果有序树中的子树只有一个孩子时,这个孩子结点就无须区分其左右次序,而二叉树无论其孩子数是否为2,均需确定其左右次序,也就是说二
叉树的结点次序不是相对于另一结点而言而是确定的。
2.
完全二叉树一定存在度为1的结点。
k
4.深度为k的二叉树中结点总数€-1。
5.哈夫曼树肯定是一棵二叉树。
6.二叉树的遍历结果不是唯一的。
7.二叉树的遍历只是为了在应用中找到一种线性次序。
&树的后根遍历和对应的二叉树的中序遍历次序一致。
9.一个树的叶结点,在先序遍历和后序遍历下,皆以相同的相对位置出现。
10.二叉树的先序遍历并不能唯一确定这棵树,但是,如果我们还知道该树的根结点是哪个,则可确定这棵二叉树。
四、应用题
1.从概念上讲,树、森林和二叉树是三种不同的数据结构,将树、森林转化为二叉树的基本目的是什么,并指出树和二叉树的主要区别。
解答:
I树的孩子兄弟链表表示法和二叉树二叉链表表示法,本质是一样的,
是解释不同,也就是说树(树是森林的特例,即森林中只有一棵树的特殊情况)可用二叉树唯一表示,并可使用二叉树的一些算法去解决树和森林中的问题。
树和二叉树的区别有三:
一是二叉树的度至多为2,树无此限制;二是
二叉树有左右子树之分,即使在只有一个分枝的情况下,也必须指出是左子树
还是右子树,树无此限制;三是二叉树允许为空,树一般不允许为空(个别书上允许为空)。
I
2.请分析线性表、树、广义表的主要结构特点,以及相互的差异与关联。
线性表属于约束最强的线性结构,在非空线性表中,只有一个“第一个”元素,也只有一个“最后一个”元素;除第一个元素外,每个元素有唯一前驱;除最后一个元素外,每个元素有唯一后继。
树是一种层次结构,有且只有一个根结点,每个结点可以有多个子女,但只有一个双亲(根无双亲),从这个意义上说
存在一(双亲)对多(子女)的关系。
广义表中的元素既可以是原子,也可以是子表,子表可以为它表共享。
从表中套表意义上说,广义表也是层次结构。
从逻辑上讲,树和广义表均属非线性结构。
但在以下意义上,又蜕变为线性结构。
如度为1的树,以及广义表中的元素都是原子时。
另外,广义表从元素之间的关系可看成前驱和后继,也符合线性表,但这时元素有原子,也有子表,即元素并不属于同一数据对象。
丨
3.将算术表达式((a+b)+c*(d+e)+f)*(g+h)转化为二叉树。
4.一个深度为L的的满二叉树有以下性质:
第L层上的结点都是叶子结点,其余各层上每
各层的结点的数目是多少?
编号为n的结点的双亲结点(若存在)的编号是多少?
编号为n的结点的第i个孩子结点(若存在)的编号是多少?
编号为n的结点有右兄弟的条件是什么?
如果有,其右兄弟的编号是多少?
个结点都有K棵非空子树,如果按层次顺序从1开始对全部结点进行编号,求:
(1)
(2)
(3)
(4)请给出计算和推导过程。
I【参考答案】I
(1)kh-1(h为层数)
(2)因为该树每层上均有Kh-1个结点,从根开始编号为1,则结点i的从右向左数第2个孩子的结点编号为ki。
设n为结点i的子女,则关系式
(i-1)k+2<=nv=ik+1成立,因i是整数,故结点n的双亲i的编号为n-2)/k+1。
(3)结点n(n>1)的前一结点编号为n-1(其最右边子女编号是
(n-1)*k+1),故结点n的第i个孩子的编号是(n-1)*k+1+i。
(4)根据以上分析,结点n有右兄弟的条件是,它不是双亲的从右数的第」子女,即(n-1)%k!
=0,其右兄弟编号是n+1。
5.已知完全二叉树的第七层有10个叶子结点,则整个二叉树的结点数最多是多少?
解答:
235I
由于本题求二叉树的结点数最多是多少,第7层共有27-1=64个结点,已
知有10个叶子,其余54个结点均为分支结点。
它在第八层上有108个叶子结I
点。
所以该二叉树的结点数最多可达(27-1+108)=235。
(注意;本题并未明说
完全二叉树的高度,但根据题意,只能8层。
)
6•—棵共有n个结点的树,其中所有分支结点的度均为K,求该树中叶子结点的个数。
解答:
设分枝结点和叶子结点数分别是为nk和n0,因此有n=n0+nk
(1)
另外从树的分枝数B与结点的关系有n=B+仁K*nk+1⑵
由
(1)和
(2)有n0=n-nk=(n(K-1)+1)/K丨
7•证明:
在任何一棵非空二叉树中有下面的等式成立:
叶子结点个数
+1。
证明设度为1和2及叶子结点数分别为n0,n1和n2,则二叉树结点数n为n=n0+n1+n2
(1)
=度为2的结点个数
再看二叉树的分支数,除根结点外,其余结点都有一个分支进入,设B为
分支总数,则n=B+1。
度为1和2的结点各有1个和2个分支,度为0的结点没有分支,故n=n1+2n2+1
(2)
由
&证明:
序序列为
(1)和
(2),得nO=n2+1
由一棵二叉树的先序序列和中序序列可唯一确定这棵二叉树。
设一棵二叉树的先
ABDGECFH,中序序列为:
DGBEAFHC。
试画出该二叉树。
解释:
因为由二叉树的先序序列和中序序列可以唯一地确定一棵二叉
树,所以进而可以唯一地确定它的后序遍历。
在先序遍历序列中,第
一个结点一定是二叉树的根结点,而在中序遍历中,根结点必然将中
序序列分割成两个子序列,前一个子序列就是左子树的中序序列,后
一个子序列就是右子树的中序序列。
根据这两个子序列的长度,可以
在先序序列中找到对应的左子树先序序列和右子树先序序列。
而左子
树先序序列的第一个结点是左子树的根结点,右子树先序序列的第一
个结点是右子树的根结点。
如此递归地进行下去,便能唯一地确定这
棵二叉树。
9.给定一组数列(15,8,10,21,6,19,3)分别代表字符A,B,C,D,E,F,G出现的频度,试叙述建立哈夫曼树的算法思想,画出哈夫曼树,给出各字符的编码值,并说明
这种编码的优点。
olO
五、算法设计题
1.要求二叉树按二叉链表形式存储;
(1)写一个建立二叉树的算法。
_typedefstructNode{
chardata;
structNode*pLchild;structNode*pRchild;j}BTreeNode,*BTree;
BTreeCreateBTree(BTreeT)//创建二叉树{
charX;
seanf("%c",&x);
if('0'==x)
{
T=NULL;
}
else
{
T=(BTree)malloc(sizeof(BTreeNode));T->data=x;
T->pLchild=CreateBTree(T->pLchild);T->pRchild=CreateBTree(T->pRchild);}
returnT;
L
(2)写一个判别给定的二叉树是否是完全二叉树的算法。
#includevstdio.h>
#defineMaxNum
10000
*m=i;
return(1+num(t->Lchild,2*i,m)+num(t->Rchild,2*i+1,m));r
main(){
intdatajnttjntijnt*m:
prlntff'Inputdata:
\r"}
scanf("%dl,Sidata");
if(t==NULL]
printK"F\n'')
*m=i;
piW'T\n"}
}
2.有n个结点的完全二叉树存放在一维数组A[1..n]中,试据此建立一棵用二叉链表表示的
二叉树,根由tree指向。
BiTreeCrtat(ElernTyp*AC]tinti)
{BtTieetree;
=sjz#of(BiNoJt))';订就一(J他-AC]*}d分}
lf(£»!
.>n>tree—null;
if(21,L-hl>n)UGC^>rchildnulhds^tr«>rcliUd—Ocatt\p2«H1)i
(2分)
}Z/Cr«t
lchild,data,rchild),设计一个算法
3.设一棵二叉树以二叉链表为存储结构,结点结构为(将二叉树中所有结点的左、右子树相互交换。
#include
/*二叉树类型的定义(二叉链表形式储存)*/
typedefchardatatype;II树的结点数据类型为字符型,可以根据需要修改
typedefstructnode*pointer;II定义二叉树结点类型
structnode{
datatypedata;//结点数据
pointerlchild,rchild;//左右孩子结点
};
typedefpointerbitree;II定义二叉树类型
I*先根遍历交换左右子树*I
I*层次遍历序列生成*Iconstintmaxsize=100;
pointerQ[maxsize+1];
bitreelevel_creat()II由层次序列建立二叉树,返回根指针
charch;
intfront,rear;
pointerroot,s;
root=NULL;II置空二叉树
front=rear=0;II置空队列
while(cin>>ch,ch!
='#'){
if(ch!
='@')II非虚结点,建立新结点
s=newnode;
s->data=ch;
s->lchild=s->rchild=NULL;
elses=NULL;
rear++;
第一个点是根,要修改头指针,他不是孩子
Q[rear]=s;II不管结点是否为虚都要入队if(rear==1){root=s;front=1;}II
是偶数,新结点是左孩子
elseif(s&&Q[front])//孩子和双亲都不是虚结点
if(rear%2==0)Q[front]->lchild=s;IIrearelse
Q[front]->rchild=s;IIrear
是奇数,新结点是右孩子
front++;
returnroot;
/*交换左右子树*/voidexchange(bitreet)pointerp;
交换
if(t==NULL)return;//空树,直接返回
p=t->lchild;t->lchild=t->rchild;t->rchild=p;//
voidmain()bitreeT=NULL;intch;
(输入'@'为虚结点,输入#结
cout<<"首先层次遍历序列生成二叉树,请输入结点数据
束):
\n";
T=level_creat();
if(T==NULL)cout<<"二叉树生成失败An";
elsecout<<"二叉树生成成功!
\n";
AA:
do{
cout<<"
菜单
\n"
<<"0.退出\n"<<"1.重新建立二叉树\n"<<"2.交换左右子数\n"<<"3.先根遍历二叉树\n"
<<"
<<"请选择:
\n"
\n";
cin>>ch;
switch(ch)case0:
break;
case1:
T=level_creat();cout<<"二叉树生成成功!
\n";break;
case2:
exchange(T);cout<<"交换成功!
\n";break;
case3:
preorder(T);cout< default: cout<<"您输入错误! 请重新输入";gotoAA; }while(ch! =0);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 测试