西南石油数据结构习题集答案

q->val.data=p->val.data; } else {(2)

if (3)

{t=reverse(p->val.ptr.tp); s=t;

while(s->val.ptr.tp!=NULL) s=s->val.ptr.tp; s->val.ptr.tp=(glist)malloc(sizeof(gnode));

s=s->val.ptr.tp;s->tag=1;s->val.ptr.tp=NULL;

s->val.ptr.hp=h; (4) __ }

else {q=(glist)malloc(sizeof(gnode));q->tag=1;

q->val.ptr.tp=NULL; (5) ; }

}

}

return(q); }

三、应用题

1. 数组A[1..8,-2..6,0..6]以行为主序存储,设第一个元素的首地址是78,每个元素的长度为4,试求元素A[4,2,3]的存储首地址。

2. 特殊矩阵和稀疏矩阵哪一种压缩存储后失去随机存取的功能?为什么?

3. 数组,广义表与线性表之间有什么样的关系?

4. 设有三对角矩阵(aij)n*n,将其三条对角线上的元素逐行地存于数组B(1:3n-2)中,使

得B[k]=aij,求:

(1)用i,j表示k的下标变换公式; (2)用k表示i,j的下标变化公式。

5.画出下面广义表的两种存储结构图示: ((((a), b)), ((( ), d), (e, f)))

6.求下列广义表运算的结果:

(1) HEAD[((a,b),(c,d))]; (2) TAIL[((a,b),(c,d))]; (3) TAIL[HEAD[((a,b),(c,d))]]; (4) HEAD[TAIL[HEAD[((a,b),(c,d))]]]; (5) TAIL[HEAD[TAIL[((a,b),(c,d))]]];

7. 利用广义表的Head和Tail运算,把原子d分别从下列广义表中分离出来,L1=(((((a),b),d),e));L2=(a,(b,((d)),e))。

四、算法设计题

1. 给定nxm矩阵A[a..b,c..d],并设A[i,j]≤A[i,j+1](a≤i≤b,c≤j≤d-1)和A[i,j]≤A[i+1,j](a≤i≤b-1,c≤j≤d).设计一算法判定X的值是否在A中,要求时间复杂度为O(m+n)。

19

2. 设二维数组a[1..m, 1..n] 含有m*n 个整数。

(1) 写出算法:判断a中所有元素是否互不相同?输出相关信息(yes/no); (2) 试分析算法的时间复杂度。

3. 设A[1..100]是一个记录构成的数组,B[1..100]是一个整数数组,其值介于1至100之间,现要求按B[1..100]的内容调整A中记录的次序,比如当B[1]=ll时,则要求将A[1]的内容调整到A[11]中去。规定可使用的附加空间为O(1)。

4.稀疏矩阵用三元组的表示形式,试写一算法实现两个稀疏矩阵相加,结果仍用三元组表示。

5. 试编写建立广义表存储结构的算法,要求在输入广义表的同时实现判断、建立。设广义表按如下形式输入(a1,a2,a3,…,an) n>=0,其中ai或为单字母表示的原子或为广义表,n=0时为只含空格字符的空表。

20

习题六 树和二叉树

一、单项选择题

1. 以下说法错误的是 ( )

A.树形结构的特点是一个结点可以有多个直接前趋 B.线性结构中的一个结点至多只有一个直接后继 C.树形结构可以表达(组织)更复杂的数据 D.树(及一切树形结构)是一种\分支层次\结构 E.任何只含一个结点的集合是一棵树 2.下列说法中正确的是 ( )

A.任何一棵二叉树中至少有一个结点的度为2 B.任何一棵二叉树中每个结点的度都为2 C.任何一棵二叉树中的度肯定等于2 D.任何一棵二叉树中的度可以小于2

3.讨论树、森林和二叉树的关系,目的是为了( )

A.借助二叉树上的运算方法去实现对树的一些运算 B.将树、森林按二叉树的存储方式进行存储 C.将树、森林转换成二叉树

D.体现一种技巧,没有什么实际意义 4.树最适合用来表示 ( )

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

C.元素之间具有分支层次关系的数据 D.元素之间无联系的数据 5.若一棵二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点个数是( )

A.9 B.11 C.15 D.不确定

6.设森林F中有三棵树,第一,第二,第三棵树的结点个数分别为M1,M2和M3。与森林F对应的二叉树根结点的右子树上的结点个数是( )。

A.M1 B.M1+M2 C.M3 D.M2+M3

7.一棵完全二叉树上有1001个结点,其中叶子结点的个数是( )

A. 250 B. 500 C.254 D.505 E.以上答案都不对 8. 设给定权值总数有n 个,其哈夫曼树的结点总数为( )

A.不确定 B.2n C.2n+1 D.2n-1 9.二叉树的第I层上最多含有结点数为( )

I I-1I-1I

A.2 B. 2-1 C. 2 D.2 -1

10.一棵二叉树高度为h,所有结点的度或为0,或为2,则这棵二叉树最少有( )结点

A.2h B.2h-1 C.2h+1 D.h+1 11. 利用二叉链表存储树,则根结点的右指针是( )。

A.指向最左孩子 B.指向最右孩子 C.空 D.非空

12.已知一棵二叉树的前序遍历结果为ABCDEF,中序遍历结果为CBAEDF,则后序遍历的结果为( )。

A.CBEFDA B. FEDCBA C. CBEDFA D.不定

13.已知某二叉树的后序遍历序列是dabec, 中序遍历序列是debac , 它的前序遍历是( )。

A.acbed B.decab C.deabc D.cedba

21

14.在二叉树结点的先序序列,中序序列和后序序列中,所有叶子结点的先后顺序( )

A.都不相同 B.完全相同

C.先序和中序相同,而与后序不同 D.中序和后序相同,而与先序不同 15.在完全二叉树中,若一个结点是叶结点,则它没( )。

A.左子结点 B.右子结点

C.左子结点和右子结点 D.左子结点,右子结点和兄弟结点 16.在下列情况中,可称为二叉树的是( )

A.每个结点至多有两棵子树的树 B. 哈夫曼树

C.每个结点至多有两棵子树的有序树 D. 每个结点只有一棵右子树 E.以上答案都不对

17. 一棵左右子树均不空的二叉树在先序线索化后,其中空的链域的个数是:( )。

A. 0 B. 1 C. 2 D. 不确定 18. 引入二叉线索树的目的是( )

A.加快查找结点的前驱或后继的速度 B.为了能在二叉树中方便的进行插入与删除 C.为了能方便的找到双亲 D.使二叉树的遍历结果唯一 19.n个结点的线索二叉树上含有的线索数为( )

A.2n B.n-l C.n+l D.n 20.由3 个结点可以构造出多少种不同的二叉树?( )

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

21.下面几个符号串编码集合中,不是前缀编码的是( )。

A.{0,10,110,1111} B.{11,10,001,101,0001} C.{00,010,0110,1000} D.{b,c,aa,ac,aba,abb,abc}

22. 一棵有n个结点的二叉树,按层次从上到下,同一层从左到右顺序存储在一维数组A[1..n]中,则二叉树中第i个结点(i从1开始用上述方法编号)的右孩子在数组A中的位置是( )

A.A[2i](2i<=n) B.A[2i+1](2i+1<=n) C.A[i-2] D.条件不充分,无法确定 23、以下说法错误的是 ( )

A.哈夫曼树是带权路径长度最短的树,路径上权值较大的结点离根较近。

B.若一个二叉树的树叶是某子树的中序遍历序列中的第一个结点,则它必是该子树的后序遍历序列中的第一个结点。

C.已知二叉树的前序遍历和后序遍历序列并不能惟一地确定这棵树,因为不知道树的根结点是哪一个。

D.在前序遍历二叉树的序列中,任何结点的子树的所有结点都是直接跟在该结点的之后。

二、判断题(在各题后填写“√”或“×”) 1. 完全二叉树一定存在度为1的结点。( )

2.对于有N个结点的二叉树,其高度为log2n。( )

3. 二叉树的遍历只是为了在应用中找到一种线性次序。( )

4. 一棵一般树的结点的前序遍历和后序遍历分别与它相应二叉树的结点前序遍历和后序遍历是一致的。( )

22

5. 用一维数组存储二叉树时,总是以前序遍历顺序存储结点。( ) 6.中序遍历一棵二叉排序树的结点就可得到排好序的结点序列。 ( ) 7.完全二叉树中,若一个结点没有左孩子,则它必是树叶。( ) 8. 二叉树只能用二叉链表表示。( )

9. 给定一棵树,可以找到唯一的一棵二叉树与之对应。( )

10. 用链表(llink-rlink)存储包含n个结点的二叉树,结点的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.若一个二叉树的叶子结点是某子树的中序遍历序列中的最后一个结点,则它必是该子树的____ __序列中的最后一个结点。

11.若以{4,5,6,7,8}作为叶子结点的权值构造哈夫曼树,则其带权路径长度是______。

12.以下程序段采用先根遍历方法求二叉树的叶子数,请在横线处填充适当的语句。

Void countleaf(bitreptr t,int *count)/*根指针为t,假定叶子数count的初值为

23

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4