厦门理工数据结构期末复习题7文档格式.docx

上传人:b****6 文档编号:20520130 上传时间:2023-01-23 格式:DOCX 页数:31 大小:299.04KB
下载 相关 举报
厦门理工数据结构期末复习题7文档格式.docx_第1页
第1页 / 共31页
厦门理工数据结构期末复习题7文档格式.docx_第2页
第2页 / 共31页
厦门理工数据结构期末复习题7文档格式.docx_第3页
第3页 / 共31页
厦门理工数据结构期末复习题7文档格式.docx_第4页
第4页 / 共31页
厦门理工数据结构期末复习题7文档格式.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

厦门理工数据结构期末复习题7文档格式.docx

《厦门理工数据结构期末复习题7文档格式.docx》由会员分享,可在线阅读,更多相关《厦门理工数据结构期末复习题7文档格式.docx(31页珍藏版)》请在冰豆网上搜索。

厦门理工数据结构期末复习题7文档格式.docx

A.有序数据元素B.无序数据元素

C.元素之间无联系的数据D.元素之间有分支的层次关系

(2)前序为A,B,C的二叉树共有(D)种。

A.2B.3C.4D.5

(3)根据二叉树的定义,具有3个结点的二叉树有(C)种树型。

A.3B.4C.5D.6

(4)在一棵具有五层的满二叉树中,结点的总数为(B)

A.16B.31C.32D.33

(5)具有64个结点的完全二叉树的深度为(C)

A.5B.6C.7D.8

(6)任何一棵二叉树的叶结点在前序、中序、后序遍历序列中的相对次序(A)。

A.不发生改变B.发生改变C.不能确定D.以上都不对

(7)A,B为一棵二叉树上的两个结点,在中序遍历时,A在B前的条件是(C)。

A.A在B右方B.A是B祖先C.A在B左方D.A是B子孙

(8)下列4棵树中,(B)不是完全二叉树。

A.B.C.D.

(9)如右图所示的二叉树,后序遍历的序列是(D)

A.A、B、C、D、E、F、G、H、I

B.A、B、D、H、I、E、C、F、G

C.H、D、I、B、E、A、F、C、G

D.H、I、D、E、B、F、G、C、A

(10)对于下边的二叉树,其中序序列为(A)

A.DBEHAFCGB.DBHEAFCGC.ABDEHCFGD.ABCDEFGH

(11)某二叉树的后序遍历序列为:

DABEC,中序遍历序列为:

DEBAC,则前序遍历序列为(D)。

A.ACBEDB.DECABC.DEABCD.CEDBA

(12)具有n(n>

1)个结点的完全二叉树中,结点i(2i>

n)的左孩子结点是(D)。

A.2iB.2i+1C.2i-1D.不存在

(若2i<

=n,则答案为A)

(13)把一棵树转换为二叉树后,这棵二叉树的形态是(A)。

A.唯一的B.有多种

C.有多种,但根结点都没有左孩子D.有多种,但根结点都没有右孩子

(14)将一棵有100个结点的完全二叉树从上到下,从左到右依次对结点编号,根结点的编号为1,则编号为45的结点的左孩子编号为(B)。

A.46B.47C.90D.91

(15)将一棵有100个结点的完全二叉树从上到下,从左到右依次对结点编号,根结点的编号为1,则编号为49的结点的右孩子编号为(B)。

A.98B.99C.50D.100

(16)二叉树按某种顺序线索化后,任一结点均有指向其前驱和后继的线索,这种说法(B)。

A.正确B.错误C.不确定D.都有可能

(17)下列陈述正确的是(D)。

A.二叉树是度为2的有序树B.二叉树中结点只有一个孩子时无左右之分

C.二叉树中必有度为2的结点D.二叉树中最多只有两棵子树,且有左右子树之分

(18)用5个权值{3,2,4,5,1}构造的哈夫曼树的带权路径长度是(B)。

A.32B.33C.34D.15

(先构造哈夫曼树,WPL=(1+2)*3+(3+4+5)*2=33)

(19)在树结构中,若结点B有4个兄弟,A是B的父亲结点,则A的度为为(C)。

A.3B.4C.5D.6

(20)二叉树的叶结点个数比度为2的结点的个数(C)。

A.无关B.相等C.多一个D.少一个

四.简答题

1.已知一棵树边的集合如下,请画出此树,并回答问题。

{(L,M),(L,N),(E,L),(B,E),(B,D),(A,B),(G,J),(G,K),(C,G),(C,F),(H,I),(C,H),(A,C)}

(1)哪个是根结点?

(2)哪些是叶结点?

(3)哪个是G的双亲?

(4)哪些是G的祖先?

(5)哪些是G的孩子?

(6)哪些是E的子孙?

(7)哪些是E的兄弟?

哪些是F的兄弟?

(8)结点B和N的层次各是多少?

(9)树的深度是多少?

(10)以结点C为根的子树的深度是多少?

(11)树的度数是多少?

答:

(1)A是根结点。

(2)叶结点:

M,N,D,J,K,F,I。

(3)G的双亲:

C。

(4)G的祖先:

A,C。

(5)G的孩子:

J,K。

(6)E的子孙:

L,M,N。

(7)E的兄弟:

D;

F的兄弟:

G,H。

(8)结点B的层次为2;

结点N的层次是5。

(9)树的深度是5。

(10)以结点C为根的子树的深度是3。

(11)树的度数是3。

2.设下列二叉树是与某森林对应的二叉树,试回答下列问题。

(1)森林中有几棵树?

(2)每一棵树的根结点分别是什么?

(3)第一棵树有几个结点?

(4)第二棵树有几个结点?

(5)森林中有几个叶结点?

解:

(1)4

(2)A,C,G,K

(3)6

(4)2

(5)7

3.二叉树按中序遍历的结果为:

ABC,试问有几种不同形态的二叉树可以得到这一遍历结果?

并画出这些二叉树。

(1)5种。

(2)

4.分别画出具有3个结点的树和三个结点的二叉树的所有不同形态。

(1)三个结点的树

(2)三个结点的二叉树树

五.应用题

1.已知一棵二叉树的后序遍历和中序遍历的序列分别为:

A,C,D,B,G,I,H,F,E和A,B,C,D,E,F,G,H,I。

请画出该二叉树,并写出它的前序遍历的序列。

恢复的二叉树为:

其前序遍历的序列为:

EBADCFHGI

2.已知一棵二叉树的前序遍历和中序遍历的序列分别为:

A,B,D,G,H,C,E,F,I和G,D,H,B,A,E,C,I,F。

请画出此二叉树,并写出它的后序遍历的序列。

其后序遍历的序列为:

GHDBEIFCA

3.已知一棵树的层次遍历的序列为:

ABCDEFGHIJ,中序遍历的序列为:

DBGEHJACIF,请画出该二叉树,并写出它的后序遍历的序列。

后序遍历的序列:

DGJHEBIFCA

4.把下列一般树转换为二叉树

(1)

(2)

(1)

(2)

5.把下列森林转换为二叉树

6.把下列二叉树还原为森林

还原后的二叉树为:

7.某二叉树的结点数据采用顺序存储,其结构如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

E

A

F

D

H

C

G

I

B

(1)画出该二叉树(3分)

(2)写出按层次遍历的结点序列(2分)

(1)

(2)层次遍历的结点序列:

EAFDHCGIB

8.某二叉树的存储如下:

lchild

data

J

rchild

其中根结点的指针为6,lchild、rchild分别为结点的左、右孩子的指针域,data为数据域。

(2)写出该树的前序遍历的结点序列(2分)

(1)

(2)前序遍历的结点序列:

ABCEDFHGIJ

9.给定如图所示二叉树T,请画出与其对应的中序线索二叉树。

(1)中序遍历序列:

5540256028083354

(2)中序线索二叉树:

10.画出表达式:

-A+B-C+D的标识符树,并求它们的后缀表达式。

后缀表达式:

0A–B+C–D+

11.画出表达式:

(A+B/C-D)*(E*(F+G))的标识符树,并求它们的后缀表达式。

ABC/+D–EFG+**

12.对于算术表达式(A+B*C/D)*E+F*G,画出标识符树,并求它们的后缀表达式。

ABCD/*+E*FG*+

13.给定一个权集W={4,5,7,8,6,12,18},试画出相应的哈夫曼树,并计算其带权路径长度WPL。

456781218

913

17

25

35

60

WPL=(12+18)*2+(6+7+8)*3+(4+5)*4=159

14.给定一个权集W={3,15,17,14,6,16,9,2},试画出相应的哈夫曼树,并计算其带权路径长度WPL。

236914151617

52933

11

20

49

82

WPL=(16+17)*2+(9+14+15)*3+6*4+(2+3)*5=229

15.假设用于通信的电文仅由A、B、C、D、E、F、G8个字母组成,字母在电文中出现的频率分别为7,19,2,6,32,3,21,10。

试为这8个字母设计哈夫曼编码。

以权值:

2、3、6、7、10、19、21、32构造哈夫曼树:

六.算法设计题

以二叉链表为存储结构,设二叉树BT结构为:

typedefstructBT

{chardata;

BT*lchild;

BT*rchild;

}BT;

1.求二叉树中的度数为2的结点。

2.求二叉树中值为最大的元素。

3.将二叉树各结点存储到一维数组中。

4.前序输出二叉树中各结点及其结点所在的层号。

5.求二叉树的宽度

6.交换二叉树各结点的左右子树。

7.写出在二叉树中查找值为x的结点在树中层数的算法。

1.求二叉树中的度数为2的结点。

voidcount(BTt)

{if(t)

{if(t->

lchild&

&

t->

rchild)

k++;

count(t->

lchild);

rchild);

}

2.求二叉树中值为最大的元素。

intmaxnode(BTt,intmax)

{if(t->

data>

max)

max=t->

data;

max=maxnode(t->

lchild,max);

rchild,max);

3.将二叉树各结点存储到一维数组中。

voidcreate(BTt,inta[],inti)

{a[i]=t->

create(t->

lchild,a,2*i);

rchild,a,2*i+1);

4.前序输出二叉树中各结点及其结点所在的层号。

voidpreorderlevel(BTt,inth)//t的层数为h

{if(t!

=NULL)

{printf(“%d,%d”,t->

data,h);

preorderlevel(t->

lchild,h+1);

rchild,h+1);

5.求二叉树的宽度

思想:

按层遍历二叉树,采用一个队列q,让根结点入队列,最后出队列,若有左右子树,则左右子树根结点入队列,如此反复,直到队列为空。

intWidth(BT*T)

{intfront=-1,rear=-1;

//队列初始化

intflag=0,count=0,p;

//p用于指向树中层的最右边的结点,标志flag记录层中结点数的最大值

if(T!

{rear++;

q[rear]=T;

flag=1;

p=rear;

}

while(front<

p)

{front++;

T=q[front];

if(T->

lchild!

q[rear]=T->

lchild;

count++;

rchild!

q[rear]=T->

rchild;

if(front==p)//当前层已遍历完毕

{if(flag<

count)

flag=count;

count=0;

       //p指向下一层最右边的结点

}

}//endwhile

return(flag);

}

6.解:

借助栈来进行对换。

Swap(BinTree*T)

{BinTree*stack[100],*temp;

inttop=-1;

root=T;

if(T!

{

top++;

stack[top]=T;

while(top>

-1)

{T=stack[top];

top--;

child!

=NULL||T->

{//交换结点的左右指针

temp=T->

T->

lchild=T->

rchild=temp;

{top++;

stack[top]=T->

}

main()

{intI,j,k,l;

printf(“\n”);

root=CreateBinTree();

Inorder(root);

i=CountNode(root);

j=CountLeafs(root);

k=Depth(root);

l=Width(root);

printf(“\nTheNode’sNumber:

%d”,i);

printf(“\nTheLeafs’sNumber:

%d”,j);

printf(“\nTheDepthis:

%d”,k);

printf(“\nThewidthis:

%d”,l);

Swap(root);

Printf(“\nTheswapTreeis:

”);

Inorder(root);

7.解:

inth=-1,lh=1,count=0;

charx=’c’;

//赋初值

Level(BinTreeT,inth,intlh)//求X结点在树只的层树

{if(T==Null)

h=0;

else

if(T->

data==x)

{h=lh;

count=h;

else

{h++;

Level(T->

lchild,h,lh);

if(h==-1)

Level(T->

rchild,h,lh);

{BinTree*(*newroot);

Printf(“\n”);

Root=CreateBinTree();

Level(root,h,lh);

Printf(“%d”,count);

模拟考题

一.读程序,写出运行结果

1.二叉树的结构如图所示,试写出执行下列算法后的输出结果:

(用大写的英文字母表示,字母之间不要任何间隔符号,最后一个字母后面也不要间隔符号)

{datatypedata;

BT*lchild;

BT*rchild;

voidPreorder(BT*T)

{if(T!

{cout<

<

T->

Preorder(T->

ABCEDFG先序遍历

2.二叉树的结构如图所示,试写出执行下列算法后的输出结果:

//定义结点

intBTD(BT*T)

{intldep,rdep;

if(T==NULL)

return0;

else

{ldep=BTD(T->

rdep=BTD(T->

if(ldep>

rdep)

returnldep+1;

returnrdep+1;

4(求二叉树深度)

3.二叉树的结构如图所示,试写出执行下列算法后,count的值为多少?

intcount=0;

voidLeafnum(BT*T)

{

{if(T->

lchild==NULL&

rchild==NULL)

count++;

Leafnum(T->

3(求叶结点数)(2,3,4改为程序填空)

二.程序填空

1.填空完成二叉树按层次遍历的程序

voidLevelorder(BT*T)//层次遍历

{inti,j;

BT*q[100],*p;

p=T;

if(p!

=NULL)

{i=1;

q[i]=p;

j=2;

while(i!

=j)

{p=q[i];

cout<

p->

data;

if(p->

{q[j]=p->

lchild;

j++;

if(p->

{q[j]=p->

rchild;

i++;

三.应用题

1.将下列二叉树转换为森林。

2.画出和下列二叉树相应的森林。

(根右边的子树肯定是森林,而孩子结点的右子树均为兄弟)

3.某二叉树的结点数据采用顺序存储,其结构如下:

(1)画出该二叉树(2分)

(2)写出结点值为D的父结点及左、右子树(3分)

(2)D的父结点为A

D的左子树为C

D的右子树为空

4.某二叉树的存储如下:

Lchild

Data

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

当前位置:首页 > 幼儿教育 > 育儿知识

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

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