【HBU】数据结构第二次月测题(树和图)

数据结构第二次月测

判断题:

  1. 存在一棵总共有2016个结点的二叉树,其中有16个结点只有一个孩子。×
  2. 在任一有向图中,所有顶点的入度之和等于所以顶点的出度之和。 √ 有一个入就有一个出
  3. 将一棵完全二叉树存于数组中(根节点的下标为1)。则下标为23和24的两个结点是兄弟。  ×   下标在1开始,2n与2n+1是兄弟
  4. 已知一棵二叉树的先序遍历结果为ABC,则CAB不可能是中序遍历结果。 √  应该是BAC
  5. Prim算法是通过每步添加一条边及其相连的顶点到一棵树,从而逐步生产最小生成树。 √
  6. 无向连通图所有顶点的度之和为偶数。  √  入度等于出度  度数和=入度+出度=2*入度   偶数
  7. 如果无向图G必须进行两次广度优先搜索才能访问其所有顶点,则G中一定有回路。 ×    不一定  还可能存在2个连通分量
  8. 用领接表法存储图,占用的存储空间数只与图中结点个数有关,而与边数无关。   ×  邻接表与边和点均有关
  9. 在一个有权无向图中,若b到a的最短路径距离是12,且c到b之间存在一条权为2的边,则c到a的最短路径距离一定不小于10.  √  如果小于最短路径就变了
  10. 对N(>=2)个权值均不相同的字符构造哈夫曼树,则树中任一非叶子结点的权值一定不小于下一层任一结点的权值。  √  上一层值是孩子树的结点和,所以一定大于等于

选择题:

1.我们用一个有向图来表示航空公司所有航班的航线。下列哪种算法最适合解决找给定两城市间最经济的飞行路线问题? D

A.拓扑排序算法

B.Kruskal算法

C.深度优先搜索

D.Dijkstra算法

2.在AOE网中,什么是关键路径? (2分)   A

A.从第一个事件到最后一个事件的最长路径

B.最短回路

C.最长回路

D.从第一个事件到最后一个事件的最短路径

3.下图为一个AOV网,其可能的拓扑有序序列为: (2分)  C

A.ACBDEF

B.ABCEFD

C.ABCEDF

D.ABCDFE

根据中序和后序还原,这棵树不是完全二叉树

4.树最适合于用来表示 (2分)  B

A.有序数据元素

B.元素之间具有分支层次关系的数据

C.无序数据元素

D.元素之间无联系的数据

5.任何一个带权无向连通图的最小生成树—— (2分)   C

A.是不唯一的

B.是唯一的

C.有可能不唯一

D.有可能不存在

6.给定有向图的邻接矩阵如下:

顶点2(编号从0开始)的出度和入度分别是:(2分)  C

A.3, 1

B.1, 3

C.0, 2

D.2, 0

行为出度  列为入度

7.设一段文本中包含4个对象{a,b,c,d},其出现次数相应为{4,2,5,1},则该段文本的哈夫曼编码比采用等长方式的编码节省了多少位数? (2分)  

A.0

B.4

C.5

D.2

8.设树T的度为4,其中度为1、2、3、4的结点个数分别为4、2、1、1。则T中有多少个叶子结点? (2分)  B

A.6

B.8

C.4

D.10

9.序遍历图示二叉树的结果为 (2分)   B

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

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

10.若一棵二叉树的后序遍历序列是{ 1, 3, 2, 6, 5, 7, 4 },中序遍历序列是{ 1, 2, 3, 4, 5, 6, 7 },则下列哪句是错的?(2分)    A

A.这是一棵完全二叉树

B.2是1和3的父结点

C.这是一棵二叉搜索树

D.7是5的父结点

编程题:

R7-1 列出所有祖先结点

对于给定的二叉树,本题要求你按从上到下顺序输出指定结点的所有祖先结点。

输入格式:

首先第一行给出一个正整数 N(≤10),为树中结点总数。树中的结点从 0 到 N−1 编号。

随后 N 行,每行给出一个对应结点左右孩子的编号。如果某个孩子不存在,则在对应位置给出 "-"。编号间以 1 个空格分隔。

最后一行给出一个结点的编号i(0≤i≤N-1)。

输出格式:

在一行中按规定顺序输出i的所有祖先结点的编号。编号间以 1 个空格分隔,行首尾不得有多余空格。

输入样例:

7
2 -
- 6
- -
0 5
- -
4 1
- -
4

输出样例:

3 5

R7-2 顺序存储的二叉树的最近的公共祖先问题

设顺序存储的二叉树中有编号为i和j的两个结点,请设计算法求出它们最近的公共祖先结点的编号和值。

输入格式:

输入第1行给出正整数n(≤1000),即顺序存储的最大容量;第2行给出n个非负整数,其间以空格分隔。其中0代表二叉树中的空结点(如果第1个结点为0,则代表一棵空树);第3行给出一对结点编号i和j。

题目保证输入正确对应一棵二叉树,且1≤i,j≤n。

输出格式:

如果i或j对应的是空结点,则输出ERROR: T[x] is NULL,其中x是i或j中先发现错误的那个编号;否则在一行中输出编号为i和j的两个结点最近的公共祖先结点的编号和值,其间以1个空格分隔。

输入样例1:

15
4 3 5 1 10 0 7 0 2 0 9 0 0 6 8
11 4

输出样例1:

2 3

输入样例2:

15
4 3 5 1 0 0 7 0 2 0 9 0 0 6 8
12 8

输出样例2:

ERROR: T[12] is NULL

R7-3 排座位

布置宴席最微妙的事情,就是给前来参宴的各位宾客安排座位。无论如何,总不能把两个死对头排到同一张宴会桌旁!这个艰巨任务现在就交给你,对任何一对客人,请编写程序告诉主人他们是否能被安排同席。

输入格式:

输入第一行给出3个正整数:N(≤100),即前来参宴的宾客总人数,则这些人从1到N编号;M为已知两两宾客之间的关系数;K为查询的条数。随后M行,每行给出一对宾客之间的关系,格式为:宾客1 宾客2 关系,其中关系为1表示是朋友,-1表示是死对头。注意两个人不可能既是朋友又是敌人。最后K行,每行给出一对需要查询的宾客编号。

这里假设朋友的朋友也是朋友。但敌人的敌人并不一定就是朋友,朋友的敌人也不一定是敌人。只有单纯直接的敌对关系才是绝对不能同席的。

输出格式:

对每个查询输出一行结果:如果两位宾客之间是朋友,且没有敌对关系,则输出No problem;如果他们之间并不是朋友,但也不敌对,则输出OK;如果他们之间有敌对,然而也有共同的朋友,则输出OK but...;如果他们之间只有敌对关系,则输出No way

输入样例:

7 8 4
5 6 1
2 7 -1
1 3 1
3 4 1
6 7 -1
1 2 1
1 4 1
2 3 -1
3 4
5 7
2 3
7 2

输出样例:

No problem
OK
OK but...
No way

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值