目录
判断题
选择题
函数题
6-1 先序输出叶结点
6-2 求二叉树高度
1、无向连通图所有顶点的度之和为偶数。T
2、无向连通图边数一定大于顶点个数减1。F
顶点数为3时,等于。
3、无向连通图至少有一个顶点的度为1。F
构成三角形的无向连通图的顶点的度数都是2,或者顶点数大于2的无向完全图
4、用邻接表法存储图,占用的存储空间数只与图中结点个数有关,而与边数无关。F
邻接表的空间复杂度为O(n+e),与图中的结点个数和边的个数都有关。
5、用邻接矩阵法存储图,占用的存储空间数只与图中结点个数有关,而与边数无关。T
6、在一个有向图中,所有顶点的入度与出度之和等于所有边之和的2倍。T
7、在任一有向图中,所有顶点的入度之和等于所有顶点的出度之和。T
8、用一维数组G[]
存储有4个顶点的无向图如下:
G[] = { 0, 1, 0, 1, 1, 0, 0, 0, 1, 0 }
则顶点2和顶点0之间是有边的。T
1、给定二叉树如下图所示。设N代表二叉树的根,L代表根结点的左子树,R代表根结点的右子树。若遍历后的结点序列为3、1、7、5、6、2、4,则其遍历方式是:
A.NRL
B.RNL
C.LRN
D.RLN
2、设高为h的二叉树(规定叶子结点的高度为1)只有度为0和2的结点,则此类二叉树的最少结点数和最多结点数分别为:
A.2h,
B.2h−1,
C.2h−1,
D.,
高度为h的二叉树,因为结点的度数只有0,2,所以最底层最少只有两个,最多全满。
最多的时候就是高度为h的满二叉树,结点数为,最少时不只是最底层只有两个,并没限制完全二叉树,所以可以是每一层都只有两个,根所在层数只有一个,所以2h-1
3、在下述结论中,正确的是:
①只有一个结点的二叉树的度为0;
②二叉树的度为2;
③二叉树的左右子树可任意交换;
④深度为K的完全二叉树的结点个数小于或等于深度相同的满二叉树。
A.①④
B.②④
C.①②③
D.②③④
二叉树是度数最大为2的树,二叉树的左右子树不可以互换。
4、任何一棵二叉树的叶结点在先序、中序和后序遍历序列中的相对次序
A.发生改变
B.不发生改变
C.不能确定
D.以上都不对
5、先序遍历图示二叉树的结果为
A.A,B,C,D,H,E,I,F,G
B.A,B,D,H,I,E,C,F,G
C.H,D,I,B,E,A,F,C,G
D.H,I,D,B,E,F,G,A,C
6、三叉树中,度为1的结点有5个,度为2的结点3个,度为3的结点2个,问该树含有几个叶结点?
A.8
B.10
C.12
D.13
三叉树的结点数等于 度数为0的结点 + 度数为1的结点 + 度数为2的结点 + 度数为3的结点
即,.
同时,三叉树的结点数等于 度数为1的结点的子结点 + 度数为2的结点的子结点 + 度数为3的结点的子结点 + 根结点
即,
由此也可以推出三叉树中,
7、在一个用数组表示的完全二叉树中,如果根结点下标为1,那么下标为17和19这两个结点的最近公共祖先结点在哪里(数组下标)? (注:两个结点的“公共祖先结点”是指同时都是这两个结点祖先的结点)
A.8
B.4
C.2
D.1
完全二叉树中,如果根结点下标为1,奇数结点的父节点为自身序号减1再除以2,偶数节点直接除以2
8、设一段文本中包含字符{a, b, c, d, e},其出现频率相应为{3, 2, 5, 1, 1}。则经过哈夫曼编码后,文本所占字节数为:
A.40
B.36
C.25
D.12
9、设一段文本中包含4个对象{a,b,c,d},其出现次数相应为{4,2,5,1},则该段文本的哈夫曼编码比采用等长方式的编码节省了多少位数?
A.0
B.2
C.4
D.5
10、由分别带权为9、2、5、7的四个叶子结点构成一棵哈夫曼树,该树的带权路径长度为:
A.23
B.37
C.44
D.46
(2+5)*3+7*2+9=44
11、已知一棵完全二叉树的第9层(设根为第1层)有100个叶结点,则该完全二叉树的结点个数最多是:
A.311
B.823
C.1847
D.无法确定
完全二叉树,最多的时候,第十层才是最后一层,
总数就是9层 ,加上第十层
=823
12、如果二叉树的前序遍历结果是12345,后序遍历结果是32541,那么该二叉树的中序遍历结果是什么?
A.23145
B.23154
C.24135
D.无法确定
13、若一棵二叉树的后序遍历序列是{ 1, 3, 2, 6, 5, 7, 4 },中序遍历序列是{ 1, 2, 3, 4, 5, 6, 7 },则下列哪句是错的?
A.这是一棵完全二叉树
B.2是1和3的父结点
C.这是一棵二叉搜索树
D.7是5的父结点
14、要使一棵非空二叉树的先序序列与中序序列相同,其所有非叶结点须满足的条件是:
A.只有左子树
B.只有右子树
C.结点的度均为1
D.结点的度均为2
先序遍历序列 根左右
中序遍历序列 左根右
去掉左子树都是根右的顺序
15、对N(N≥2)个权值均不相同的字符构造哈夫曼树。下列关于该哈夫曼树的叙述中,错误的是:
A.树中一定没有度为1的结点
B.树中两个权值最小的结点一定是兄弟结点
C.树中任一非叶结点的权值一定不小于下一层任一结点的权值
D.该树一定是一棵完全二叉树
16、已知字符集{ a, b, c, d, e, f, g, h }。若各字符的哈夫曼编码依次是 0100, 10, 0000, 0101, 001, 011, 11, 0001,则编码序列 0100011001001011110101 的译码结果是:
A.acgabfh
B.adbagbb
C.afbeagd
D.afeefgd
17、已知字符集{ a, b, c, d, e, f },若各字符出现的次数分别为{ 6, 3, 8, 2, 10, 4 },则对应字符集中各字符的哈夫曼编码可能是:
A.00, 1011, 01, 1010, 11, 100
B.00, 100, 110, 000, 0010, 01
C.10, 1011, 11, 0011, 00, 010
D.0011, 10, 11, 0010, 01, 000
18、对 n 个互不相同的符号进行哈夫曼编码。若生成的哈夫曼树共有 115 个结点,则 n 的值是:
A.56
B.57
C.58
D.60
因为根节点那层只有一个,且不是原本需要编码的符号,减去根节点,因为每层一个需要编码的符号,所以除以二,最后一层是两个符号,所以再加一。
19、具有5个顶点的有向完全图有多少条弧?
A.10
B.16
C.20
D.25
有向完全图是指图中各边都有方向,且每两个顶点之间都有两条方向相反的边连接的图。
每个顶点都跟其余顶点相连,因为是有向的,所以直接5*4=20
20、在N个顶点的无向图中,所有顶点的度之和不会超过顶点数的多少倍?
A.1
B.2
C.(N−1)/2
D.N−1
每个顶点最多有 N-1度,所有顶点的度之和最大是 N * (N-1)
21、对于一个具有N个顶点的无向图,要连通所有顶点至少需要多少条边?
A.N−1
B.N
C.N+1
D.N/2
22、对于一个具有N个顶点的无向图,若采用邻接矩阵表示,则该矩阵的大小是:
A.N−1
B.N
C.
D.
邻接矩阵是基于顶点的个数决定大小的,是用来表示顶点之间相邻关系的矩阵,行和列分别是顶点组。
23、对于有向图,其邻接矩阵表示比邻接表表示更易于:
A.求一个顶点的入度
B.求一个顶点的出边邻接点
C.进行图的深度优先遍历
D.进行图的广度优先遍历
有向图邻接矩阵中第i行非零元素的个数为第i个顶点的出度,第i列非零元素的个数为第i个顶点的入度,第i个顶点的度为第i行与第i列非零元素个数之和。
24、若一个有向图用邻接矩阵表示,则第i个结点的入度就是:
A.第i行的元素个数
B.第i行的非零元素个数
C.第i列的非零元素个数
D.第i列的零元素个数
25、关于图的邻接矩阵,下列哪个结论是正确的?
A.有向图的邻接矩阵总是不对称的
B.有向图的邻接矩阵可以是对称的,也可以是不对称的
C.无向图的邻接矩阵总是不对称的
D.无向图的邻接矩阵可以是不对称的,也可以是对称的
26、在一个无向图中,所有顶点的度数之和等于所有边数的多少倍?
A.1/2
B.1
C.2
D.4
无向图中,每两个相邻的顶点之间有一条边,而这一条边分别给两个顶点提供一度
27、在一个有向图中,所有顶点的入度与出度之和等于所有边之和的多少倍?
A.1/2
B.1
C.2
D.4
有向图中,每两个相邻的顶点之间至少有一条弧,而这一条弧给两个顶点分别提供一个出度和一个入度
28、在任一有向图中,所有顶点的入度之和与所有顶点的出度之和的关系是:
A.相等
B.大于等于
C.小于等于
D.不确定
一条弧必然要连接两个顶点,所以一个入度的存在必定有一个对应出度的存在
29、如果G是一个有15条边的非连通无向图,那么该图顶点个数最少为多少?
A.7
B.8
C.9
D.10
无向图的边数最多为,去掉一个不与其他任意顶点相邻的点后,边数大于等于15即可
30、给定一个有向图的邻接表如下图,则该图有__个强连通分量。
A.4 {{0, 1, 5}, {2}, {3}, {4}}
B.3 {{2}, {4}, {0, 1, 3, 5}}
C.1 {0, 1, 2, 3, 4, 5}
D.1 {0, 5, 1, 3}
在有向图G中,如果对于每一对,从
到
和从
到
都存在路径,则称G是强连通图。(数据结构C语言版第二版)
即结果是必定有一个回路存在,可以理解为如果一个有向图中,存在一条回路,所有的结点至少被经过一次,这样的图为强连通图。
有向图中的极大强连通子图称作有向图的强连通分量。
31、给定有向图的邻接矩阵如下:
顶点2(编号从0开始)的出度和入度分别是:
A.3, 1
B.1, 3
C.0, 2
D.2, 0
有向图邻接矩阵中第i行非零元素的个数为第i个顶点的出度,第i列非零元素的个数为第i个顶点的入度,第i个顶点的度为第i行与第i列非零元素个数之和。
32、已知无向图G含有16条边,其中度为4的顶点个数为3,度为3的顶点个数为4,其他顶点的度均小于3。图G所含的顶点个数至少是:
A.10
B.11
C.13
D.15
无向图的度数之和是边数之和的二倍,因为有16条边,所以总共有32度,已知有3*4+4*3=24度,剩下八度,因为其他顶点的度数均小于3,所以当度数为2的时候顶点最少,是4个,4+4+3=11.
33、设有向图的顶点个数为n,则该图最多可以有()条弧。
A.n-1
B.n(n-1)/2
C.n(n-1)
D.
34、一个有n个顶点的无向图最多有()条边。
A.n
B.n(n-1)
C.n(n-1)/2
D.2n
35、具有6个顶点的无向图至少应有()条边才能确保是一个连通图。
A.5
B.6
C.7
D.8
36、假设一个有n个顶点和e条弧的有向图用邻接表表示,则删除与某个顶点相关的所有弧的时间复杂度是()。
A.O(n)
B.O(e)
C.O(n+e)
D.O(n*e)
37、下列算法由无向图的邻接表生成邻接矩阵,请将该算法补充完整。
typedef struct Node {
int adjvex; //邻接点的位置
struct Node *next; //指向下一条边
} edgenode; //边结点
typedef edgenode *adjlist[ MaxVertexNum ];
typedef int adjmatrix[MaxVertexNum][MaxVertexNum];
void Graph3(adjlist GL, adjmatrix GA, int n)
{ //由GL建立GA
int i, j;
edgenode *p;
for ( i = 0 ; i
A.j= p->adjvex ; GA[i][j] = 1; p = p->next;
B.GA[i][j] = 1; p = p->next ;
C.j= p->adjvex ; GL[i][j] = 1; p = p->next ;
D.if (GL[i] ){ GA[i][ p->adjvex] = 1; break; } else p = p->next ;
38、下列关于无向连通图特性的叙述中,正确的是
I.所有顶点的度之和为偶数 II.边数大于等于顶点个数减1 III.至少有一个顶点的度为1 。
A.只有I
B.只有II
C.I和II
D.I和III
比如由三个顶点构成三角形的无向连通图,它的顶点的度数都是2,或者顶点数大于2的无向完全图
39、一个n个顶点的连通无向图,其边的个数至少为()。
A.n-1
B.n
C.n+1
D.n*(n-1)
40、在一个图中,所有顶点的度数之和等于所有边数的()倍。
A.1/2
B.1
C.2
D.4
41、(neuDS)一个有向图有n个顶点,则每个顶点的度可能的最大值是( )。
A.n-1
B.2(n-1)
C.n
D.2n
42、下列说法不正确的是:
A.图的遍历是从给定的源点出发每一个顶点仅被访问一次
B.遍历的基本算法有两种:深度遍历和广度遍历
C.图的深度遍历是一个递归过程
D.图的深度遍历不适用于有向图
43、图的深度优先遍历类似于二叉树的:
A.先序遍历
B.中序遍历
C.后序遍历
D.层次遍历
44、在用邻接表表示有N个结点E条边的图时,深度优先遍历算法的时间复杂度为:
A.O(N)
B.O(N+E)
C.O()
D.O()
45、在图中自a点开始进行深度优先遍历算法可能得到的结果为:
A.a, b, e, c, d, f
B.a, c, f, e, b, d
C.a, e, b, c, f, d
D.a, e, d, f, c, b
46、在图中自d点开始进行深度优先遍历算法可能得到的结果为:
A.d,a,c,f,e,b
B.d,a,e,b,c,f
C.d,e,a,c,f,b
D.d,f,c,e,a,b
47、已知一个图的邻接矩阵如下,则从顶点V1出发按深度优先搜索法进行遍历,可能得到的一种顶点序列为:
A.V1,V2,V3,V4,V5,V6
B.V1,V2,V4,V5,V6,V3
C.V1,V3,V5,V2,V4,V6
D.V1,V3,V5,V6,V2,V4
48、如果从无向图的任一顶点出发进行一次深度优先搜索可访问所有顶点,则该图一定是:
A.连通图
B.完全图
C.有回路的图
D.一棵树
49、在图中自a点开始进行广度优先遍历算法可能得到的结果为:
A.a, e, d, f, c, b
B.a, c, f, e, b, d
C.a, e, b, c, f, d
D.a, b, e, c, d, f
50、在图中自c点开始进行广度优先遍历算法可能得到的结果为:
A.c,a,b,e,f,d
B.c,a,f,d,e,b
C.c,f,a,d,e,b
D.c,f,a,b,d,e
51、给定一有向图的邻接表如下。若从v1开始利用此邻接表做广度优先搜索得到的顶点序列为:{v1, v3, v2, v4, v5},则该邻接表中顺序填空的结果应为:
A.v2, v3, v4
B.v3, v2, v4
C.v3, v4, v2
D.v4, v3, v2
52、给定一有向图的邻接表如下。从顶点V1出发按广度优先搜索法进行遍历,则得到的一种顶点序列为:
A.V1,V2,V3,V4,V5
B.V1,V2,V3,V5,V4
C.V1,V3,V2,V4,V5
D.V1,V4,V3,V5,V2
53、已知一个图的邻接矩阵如下,则从顶点V1出发按广度优先搜索法进行遍历,可能得到的一种顶点序列为:
A.V1,V2,V3,V5,V4,V6
B.V1,V2,V4,V5,V6,V3
C.V1,V3,V5,V2,V4,V6
D.V1,V3,V5,V6,V4,V2
54、给定一有向图的邻接表如下。从顶点V1出发按深度优先搜索法进行遍历,则得到的一种顶点序列为:
A.V1,V5,V4,V7,V6,V2,V3
B.V1,V5,V4,V7,V6,V3,V2
C.V1,V2,V3,V4,V7,V6,V5
D.V1,V5,V6,V4,V7,V2,V3
55、给定一有向图的邻接表如下。从顶点V1出发按深度优先搜索法进行遍历,则得到的一种顶点序列为:
A.V1,V2,V3,V4,V7,V6,V5
B.V1,V5,V4,V7,V6,V2,V3
C.V1,V5,V6,V4,V7,V2,V3
D.V1,V5,V4,V7,V6,V3,V2
56、图的广度优先遍历类似于二叉树的:
A.先序遍历
B.中序遍历
C.后序遍历
D.层次遍历
57、图的广度优先遍历类似于二叉树的:
A.先序遍历
B.中序遍历
C.层次遍历
D.后序遍历
58、下列选项中,不是下图深度优先搜索序列的是:
A.V1, V5, V4, V3, V2
B.V1, V3, V2, V5, V4
C.V1, V2, V5, V4, V3
D.V1, V2, V3, V4, V5
59、给定有权无向图如下。关于其最小生成树,下列哪句是对的?
A.最小生成树不唯一,其总权重为23
B.最小生成树唯一,其总权重为20
C.边(B, F)一定在树中,树的总权重为23
D.边(H, G)一定在树中,树的总权重为20
60、若某图的深度优先搜索序列是{V1, V4, V0, V3, V2},则下列哪个图不可能对应该序列?
A.
B.
C.
D.
61、广度优先搜索
观察下面的无向图中:
从顶点 A 出发按广度优先遍历不可能得到哪个序列?
A.ABGFCDE
B.ABGFCED
C.AFGBCDE
D.AGBFDEC
本题要求按照先序遍历的顺序输出给定二叉树的叶结点。
void PreorderPrintLeaves( BinTree BT );
其中BinTree
结构定义如下:
typedef struct TNode *Position;
typedef Position BinTree;
struct TNode{
ElementType Data;
BinTree Left;
BinTree Right;
};
函数PreorderPrintLeaves
应按照先序遍历的顺序输出给定二叉树BT
的叶结点,格式为一个空格跟着一个字符。
#include
#include
typedef char ElementType;
typedef struct TNode *Position;
typedef Position BinTree;
struct TNode{
ElementType Data;
BinTree Left;
BinTree Right;
};
BinTree CreatBinTree(); /* 实现细节忽略 */
void PreorderPrintLeaves( BinTree BT );
int main()
{
BinTree BT = CreatBinTree();
printf("Leaf nodes are:");
PreorderPrintLeaves(BT);
printf("\n");
return 0;
}
/* 你的代码将被嵌在这里 */
Leaf nodes are: D E H I
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
void PreorderPrintLeaves( BinTree BT )
{
if(BT != NULL)
{
if(BT->Left == NULL && BT->Right == NULL)
{
printf(" %c",BT->Data);
}
PreorderPrintLeaves(BT->Left);
PreorderPrintLeaves(BT->Right);
}
}
本题要求给定二叉树的高度。
int GetHeight( BinTree BT );
其中BinTree
结构定义如下:
typedef struct TNode *Position;
typedef Position BinTree;
struct TNode{
ElementType Data;
BinTree Left;
BinTree Right;
};
要求函数返回给定二叉树BT的高度值。
#include
#include
typedef char ElementType;
typedef struct TNode *Position;
typedef Position BinTree;
struct TNode{
ElementType Data;
BinTree Left;
BinTree Right;
};
BinTree CreatBinTree(); /* 实现细节忽略 */
int GetHeight( BinTree BT );
int main()
{
BinTree BT = CreatBinTree();
printf("%d\n", GetHeight(BT));
return 0;
}
/* 你的代码将被嵌在这里 */
4
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
int GetHeight( BinTree BT )
{
int len1,len2;
if(BT==NULL) return 0;
len1=GetHeight(BT->Left);
len2=GetHeight(BT->Right);
return (len1>len2) ? (len1+1) : (len2+1);
}