第6章测试题Word文档下载推荐.docx

上传人:b****3 文档编号:17046532 上传时间:2022-11-28 格式:DOCX 页数:14 大小:226.67KB
下载 相关 举报
第6章测试题Word文档下载推荐.docx_第1页
第1页 / 共14页
第6章测试题Word文档下载推荐.docx_第2页
第2页 / 共14页
第6章测试题Word文档下载推荐.docx_第3页
第3页 / 共14页
第6章测试题Word文档下载推荐.docx_第4页
第4页 / 共14页
第6章测试题Word文档下载推荐.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

第6章测试题Word文档下载推荐.docx

《第6章测试题Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《第6章测试题Word文档下载推荐.docx(14页珍藏版)》请在冰豆网上搜索。

第6章测试题Word文档下载推荐.docx

设给定权值总数有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

在完全二叉树中,编号为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"

&

amp;

x);

if('

0'

==x)

{

T=NULL;

}

else

T=(BTree)malloc(sizeof(BTreeNode));

T-&

gt;

data=x;

T-&

gt;

pLchild=CreateBTree(T-&

pLchild);

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'

'

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<

iostream.h>

/*二叉树类型的定义(二叉链表形式储存)*/

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;

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;

rchild=p;

//

voidmain()bitreeT=NULL;

intch;

(输入'

为虚结点,输入#结

cout<

<

"

首先层次遍历序列生成二叉树,请输入结点数据

束):

\n"

;

T=level_creat();

if(T==NULL)cout<

二叉树生成失败An"

elsecout<

二叉树生成成功!

AA:

do{

菜单

0.退出\n"

<

1.重新建立二叉树\n"

2.交换左右子数\n"

3.先根遍历二叉树\n"

请选择:

cin>

>

ch;

switch(ch)case0:

break;

case1:

T=level_creat();

cout<

二叉树生成成功!

case2:

exchange(T);

交换成功!

case3:

preorder(T);

endl;

default:

您输入错误!

请重新输入"

gotoAA;

}while(ch!

=0);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 成人教育 > 远程网络教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1