5 - 2 单选题

news2024/10/7 12:24:01

1.下列线索二叉树中(用虚线表示线索),符合后序线索树定义的是:B

 后序线索二叉树的构建流程就是:

1.后序遍历二叉树:d b c a

2.第一个结点的前驱是NULL,即d的前驱,d的左孩子为NULL

3.按后序遍历的顺序来将空指针域指向对应的结点

       d的后继(右孩子)指向b

       b的前驱(左孩子)指向d

      c的后继(右孩子)指向a

      c的前驱(左孩子)指向b

2.引人线索二叉树的目的的是( A)。

A.加快查找结点的前驱或后继的速度

B.为了能在二叉树中方便地进行插人与侧除

C.为了能方便地找到双亲

D.使二叉树的遍历结果唯一

构建线索二叉树就是将空指针域指向对应结点的前驱或者后继,所以选A

3.若X是后序线索二叉树中的叶结点,且X存在左兄弟结点Y,则X的右线索指向的是(A)。

A.X的父结点

B.以Y为根的子树的最左下结点

C.X的左兄弟结点Y

D.以Y为根的子树的最右下结点

构造一个符合题意的二叉树就行

 X的右线索指向的是X的后继,因为是后序线索二叉树,所以是X的父节点

4.已知字符集{ a, b, c, d, e, f },若各字符出现的次数分别为{ 6, 3, 8, 2, 10, 4 },则对应字符集中各字符的哈夫曼编码可能是:A

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

构造哈夫曼树其中之一,其余的就是交换左右子树。

 

5.对 n 个互不相同的符号进行哈夫曼编码。若生成的哈夫曼树共有 115 个结点,则 n 的值是:C

A.56

B.57

C.58

D.60

对n个数进行哈夫曼编码,那么就有n个叶结点,n-1个非叶结点,相加得115,即2*n-1=115,n=58

6.将森林转换为对应的二叉树,若在二叉树中,结点u是结点v的父结点的父结点,则在原来的森林中,u和v可能具有的关系是:B

  1. 父子关系; 2. 兄弟关系; 3. u的父结点与v的父结点是兄弟关系

A.只有2

B.1和2

C.1和3

D.1、2和3

根据题意,列出二叉树,还原为森林

 

7.对于一个有N个结点、K条边的森林,共有几棵树?A

A.N−K

B.N−K+1

C.N−K−1

D.不能确定

对于一棵树,有这样的性质:节点数-边数=1。

例如:

有5个结点,4条边

森林是0棵或有限棵不相交的树的集合,比如森林中有3棵树,那么每棵树的结点数比边数多1,那么三棵树的总结点数就比总边数多3。由此可得,对于一个有N个结点、K条边的森林,它有N-K棵树

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

A.M1​

B.M1​+M2​

C.M2​+M3​

D.M3​

森林F对应的二叉树根结点的左子树就是第一棵树,森林F对应的二叉树根结点的右子树是其余树,所以选C

9.由若干个二叉树组成的森林F中,叶结点总个数为N,度为2的结点总个数为M,则该集合中二叉树的个数为:B

A.M−N

B.N−M

C.N−M−1

D.无法确定

对于一棵非空二叉树,有这样的性质,若叶子结点数为a,度数为2的节点数为b,那么a=b+1

对于森林,若叶子结点数为N,度数为2的节点数为M,那么N-M=树的个数

10.若森林F有15条边、25个结点,则F包含树的个数是:C

A.8

B.9

C.10

D.11

和第7题一样

11.给定一有向图的邻接表如下。从顶点V1出发按深度优先搜索法进行遍历,则得到的一种顶点序列为:

A.V1,V5,V4,V7,V6,V2,V3

B.V1,V2,V3,V4,V7,V6,V5

C.V1,V5,V4,V7,V6,V3,V2

D.V1,V5,V6,V4,V7,V2,V3

无向图邻接表的广度优先代码:

#include<iostream>
#include<queue>
#define MaxVerNum 100
using namespace std;

typedef int VertexType;
typedef struct node {
    int adjvex;
    struct node* next;
}EdgeNode;

typedef struct vnode {
    VertexType vertex;
    EdgeNode* firstedge;
}VertexNode;

typedef struct {
    VertexNode AdhList[MaxVerNum];
    int v_num;
    int e_num;
}ALGraph;

ALGraph* CreatALGraph() {
    ALGraph* G = (ALGraph*)malloc(sizeof(ALGraph));
    printf("请输入顶点数和边数:\n");
    scanf("%d,%d", &G->v_num, &G->e_num);
    for (int i = 0; i < G->v_num; i++) {
        cin >> G->AdhList[i].vertex;
        G->AdhList[i].firstedge = NULL;
    }
    int p,q;
    for (int i = 0; i < G->e_num; i++) {
        scanf("%d,%d", &p, &q);

        EdgeNode* newEdge = (EdgeNode*)malloc(sizeof(EdgeNode));
        newEdge->adjvex = q;
        newEdge->next = G->AdhList[p].firstedge;
        G->AdhList[p].firstedge = newEdge;

        newEdge = (EdgeNode*)malloc(sizeof(EdgeNode));
        newEdge->adjvex = p;
        newEdge->next = G->AdhList[q].firstedge;
        G->AdhList[q].firstedge = newEdge;
    }
    return G;
}

int flag[MaxVerNum] = { 0 };

void BFS(ALGraph* G, int i) {
    queue<int> q;

    q.push(i);
    printf("%d ", G->AdhList[i].vertex);
    flag[i] = 1;
    while (!q.empty()) {
        int m = q.front();
        q.pop();
        
        EdgeNode* temp = G->AdhList[m].firstedge;
        while (temp) {
            if (!flag[temp->adjvex]) {
                printf("%d ", temp->adjvex);
                flag[temp->adjvex] = 1;
                q.push(temp->adjvex);
            }
           
            temp = temp->next;
        }

    }
}

void BFStraverseAL(ALGraph* G) {
    for (int i = 0; i < G->v_num; i++) {
        if (!flag[i]) {
            BFS(G, i);
        }
    }
}

/*
4,4
0
1
2
3
0,3
0,1
1,3
1,2
*/

int main()
{
    ALGraph* G = CreatALGraph();
    BFStraverseAL(G);
    /*
    for (int i = 0; i < G->v_num; i++) {
        EdgeNode* temp = G->AdhList[i].firstedge;
        printf("%d ", G->AdhList[i].vertex);
        while (temp) {
            printf("%d ", temp->adjvex);
            temp = temp->next;
        }
        putchar('\n');
    }
    */
    return 0;
}

 

12.下列选项中,不是下图深度优先搜索序列的是  D

A.V1​, V5​, V4​, V3​, V2​

B.V1​, V3​, V2​, V5​, V4​

C.V1​, V2​, V5​, V4​, V3​

D.V1​, V2​, V3​, V4​, V5​

首先创建该图的邻接表存储

v1->v2->v3->v5(也可能是v1->v3->v2->v5)

v2->v5

v3->v2

v4->v3

v5->v4

然后看选项,都是从v1开始的,咱们也从v1开始:与v1相邻的结点可能是v2,v3或者v5,

假如是v1,v2,那么与v2的相邻的结点是v5,所以D是错的。

代码实现:

 

#include<iostream>
#define MAX 10
using namespace std;

//定义邻接表
typedef struct enode {
	int edata;
	struct enode* next;
};

typedef struct vnode {
	int vdata;
	struct enode* first;
};

typedef struct ALGraph {
	struct vnode s[MAX];
	int v_num, e_num;
};

ALGraph* creat() {
	ALGraph* newALGpragh = (ALGraph*)malloc(sizeof(struct ALGraph));
	printf("请输入顶点数与边数:\n");
	scanf("%d,%d", &newALGpragh->v_num, &newALGpragh->e_num);

	for (int i = 1; i <= newALGpragh->v_num; i++) {
		scanf("%d", &newALGpragh->s[i].vdata);
		newALGpragh->s[i].first = NULL;
	}
	for (int i = 0; i < newALGpragh->e_num; i++) {
		int m, n;
		scanf("%d,%d", &m, &n);

		struct enode* temp = (enode*)malloc(sizeof(struct enode));
		temp->edata = n;
		temp->next = NULL;

		temp->next = newALGpragh->s[m].first;
		newALGpragh->s[m].first = temp;
	}
	return newALGpragh;
}

int flag[MAX];

void DFSTravesALG(ALGraph* G, int i) {
	printf("%d ", i);
	flag[i] = 1;
	enode* temp = G->s[i].first;
	while (temp) {
		int j = temp->edata;
		if (!flag[j]) {
			DFSTravesALG(G, j);
		}
		temp = temp->next;
	}
}

void DFS(ALGraph* G) {
	for (int i = 1; i <= G->v_num; i++) {
		if (!flag[i]) {
			DFSTravesALG(G, i);
		}
	}
}
/*
5,7
1
2
3
4
5
1,2
1,3
1,5
2,5
3,2
4,3
5,4
*/
int main() {
	ALGraph* newALGraph = creat();

	printf("邻接表:\n");
	for (int i = 1; i <= newALGraph->v_num; i++) {
		printf("v%d:", newALGraph->s[i].vdata);
		enode* temp = newALGraph->s[i].first;
		while(temp) {
			printf("%d ", temp->edata);
			temp = temp->next;
		}
		printf("\n");
	}

	printf("深度优先搜索:\n");
	DFS(newALGraph);
	return 0;
}

 

13.给定无向带权图如下,以下哪个从顶点 a 出发深度优先搜索遍历该图的顶点序列(多个顶点可以选择时按字母序)?  C

A.abecdfhg

B.abcdehgf

C.abcdefgh

D.abchgfde

12题是有向图,这个是无向图,做法一样

14.如果无向图G必须进行两次广度优先搜索才能访问其所有顶点,则下列说法中不正确的是:B

A.G肯定不是完全图

B.G中一定有回路

C.G一定不是连通图

D.G有2个连通分量

名词解释:

完全图
 也称简单完全图。假设一个图有n个顶点,那么如果任意两个顶点之间都有边的话,该图就称为完全图,有n(n-1)/2 条边。

也就是有n个顶点,那么每一个顶点与其他n-1个顶点都要连上。

 

连通图(一般都是指无向图):
 从顶点v到w有路径,就称顶点v和m连通。(路径是由顶点和相邻顶点序偶构成的边所形成的序列,其实就是一堆相连的顶点及其边)

也就是如果图中任意俩顶点都连通,则该图为连通图。

连通分量:
 与连通图对应,一般书上说的都是特指无向图!!
 极大连通子图是无向图的连通分量。

简单解释就是图中有几个不连通的部分就有几个连通分量

题干中的无向图G必须进行两次广度优先搜索才能访问其所有顶点就是在说下面代码的BFSTravseALG(ALGraph* G, int i)函数要执行两次,什么情况下会执行两次?

就是BFSTravseALG(ALGraph* G, int i)函数没能一次将Bflag的有效范围全部变为1

那么图便有不连通的部分,执行几次广度优先搜索就有几个不连通的部分,也就是有几个连通分量,D对;

因为有不连通的部分,所以不是完全图,A,C对;

不一定有回路,所以B错。

这是广度优先遍历的代码:

int Bflag[MAX];

void BFSTravseALG(ALGraph* G, int i) {
	printf("%d ", i);
	Bflag[i] = 1;

	int queue[MAX];
	int left = -1;
	int right = -1;
	queue[++right] = i;
	while (left != right) {
		int temp = queue[++left];
		enode* q = G->s[temp].first;
		while (q) {
			int m = q->edata;
			if (!Bflag[m]) {
				printf("%d ", m);
				Bflag[m] = 1;
				queue[++right] = m;
			}
			q = q->next;
		}
	}
}

void BFS(ALGraph* G) {
	for (int i = 1; i < G->v_num; i++) {
		if (!Bflag[i]) {
			BFSTravseALG(G, i);
		}
	}
}

15.给定一有向图的邻接表如下。从顶点V1出发按广度优先搜索法进行遍历,则得到的一种顶点序列为:C

A.V1,V2,V3,V4,V5

B.V1,V2,V3,V5,V4

C.V1,V3,V2,V4,V5

D.V1,V4,V3,V5,V2

这里面邻接点中的数字代表的是数组的下标,比如2代表的是v3,不是v2

16.已知一个图的邻接矩阵如下,则从顶点V1出发按广度优先搜索法进行遍历,可能得到的一种顶点序列为:A

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

按着这个邻接矩阵,画出图或者邻接表就行

17.图的广度优先遍历类似于二叉树的:D

A.先序遍历

B.中序遍历

C.后序遍历

D.层次遍历

18.给定有权无向图的邻接矩阵如下,其最小生成树的总权重是:D

A.10

B.11

C.12

D.14

按着这个邻接矩阵,画出图,然后算一下就行。

19.给定有权无向图的邻接矩阵如下,其最小生成树的总权重是:C

A.20

B.22

C.8

D.15

20.给定有权无向图如下。关于其最小生成树,下列哪句是对的?A

A.最小生成树不唯一,其总权重为23

B.最小生成树唯一,其总权重为20

C.边(B, F)一定在树中,树的总权重为23

D.边(H, G)一定在树中,树的总权重为20

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/45654.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在 Android 中创建静态应用程序快捷方式

您是否在日常应用程序中看到过快捷方式示例?可能像 Instagram、Discord、Medium 等。提供它们是为了帮助我们快速导航到应用程序内部的特定功能、屏幕或部分,而无需逐步浏览它们。 在本文中,我们将逐步实现静态快捷方式。但在我们开始编码之前,我们需要知道这个快捷方式到底…

大数据(9h)FlinkSQL之Lookup Join

文章目录概述pom.xmlMySQL建表对应Flink的建表SQLLookup JoinFlinkSQL完整Java代码概述 lookup join通常是 查询外部系统的数据 来 充实FlinkSQL的主表 例如&#xff1a;事实表 关联 维度表&#xff0c;维度表在外部系统&#xff08;如MySQL&#xff09;要求&#xff1a; 1个表…

中国多媒体与网络教学学报杂志社中国多媒体与网络教学学报编辑部2022年第9期目录

多媒体信息技术《中国多媒体与网络教学学报》投稿&#xff1a;cn7kantougao163.com 采油工程探索式虚拟仿真实验教学实践——以有杆抽油系统实验为例 窦祥骥 ;何岩峰 ;张少辉 ;王相 ;徐慧 ; 1-5 人体寄生虫课程网络虚拟实验环境的构建及其应用研究 周蕾;贺帅;李晓琳;席…

深入理解mysql执行的底层机制

MySql系列整体栏目 内容链接地址【一】深入理解mysql索引本质https://blog.csdn.net/zhenghuishengq/article/details/121027025【二】深入理解explain以及索引优化https://blog.csdn.net/zhenghuishengq/article/details/124552080【三】深入理解mysql事务本质https://blog.cs…

3dmax如何进行网络渲染?网渲云渲染渲染农场怎么用?

渲染本身是将3d模型转换为2d图像的一个过程&#xff0c;而网络渲染就是把3d模型放在云端进行完成&#xff0c;而本地我们只需要等待结果就好。而云渲染也就是网渲的标准称呼&#xff0c;两个是一个意思。 那怎么进行网络渲染呢&#xff1f; 首先我们需要下载网络渲染客户端&a…

03-Docker-Docker镜像的分层概念

目录 一、镜像是什么 二、UnionFS&#xff08;联合文件系统&#xff09; 三、Docker镜像加载原理 四、将容器生成为镜像Commit命令 一、镜像是什么 是一种轻量级、可执行的独立软件包&#xff0c;包含运行某个软件所需的所有内容&#xff0c;我们把应用程序和配置依赖打包好…

TextBox文本框与PasswordBox密码框水印

在开发一个软件和网页的时候&#xff0c;都会有一个功能&#xff0c;那就是登陆功能&#xff0c;有了登陆那就一定需要用户输入账号和密码&#xff0c;我们在写登陆页面都会想到使用TextBox和PasswordBox去完成这两个功能&#xff0c;但是有一个问题&#xff0c;那就是如果你使…

java EE初阶 — 线程的状态

文章目录1.状态的基本认识2.观察线程的所有状态3.线程状态和状态转移4.多线程的意义1.状态的基本认识 NEW 创建了 Thread 对象&#xff0c;但是还没调用 start&#xff08;内核里还没有创建对应的PCB&#xff09;TERMINATED 表示内核中的 PCB 已经执行完毕了&#xff0c;但是 …

zabbix监控触发器与报警动作

目录 一、环境准备 1、搭建zabbix基础环境 2、创建被监控主机 二、触发器概念 三、创建触发器 1、创建触发器步骤 2、触发器表达式 &#xff08;1&#xff09;表达式格式 &#xff08;2&#xff09;表达式函数 3、配置触发器 四、创建报警动作 1、设置邮箱服务器 …

学生选课系统

项目描述 通过项目背景的分析以及了解到现在学校面临的问题&#xff0c;特别需要一个选课管理系统保证学生信息以及各种课程成绩的准确性和实效性&#xff0c;通过利用计算机的高速计算和快速的统计分析&#xff0c;保证学生信息的最新记录。从教职工的角度老考虑&#xff0c;…

网络套接字编程(UDP协议)

文章目录预备知识socket&#xff08;网络套接字&#xff09;编程接口简单的UDP网络程序增加多用户可以互相通信预备知识 网络字节序 大端存储&#xff1a;数据的高字节内容保存在内存的低地址处&#xff0c;数据的低字节内容保存在内存的高地址处 小端存储&#xff1a;数据的高…

婚纱预订小程序开发,商家线上展示平台

婚纱代表着纯洁与忠贞&#xff0c;也是爱情永恒的见证者&#xff0c;穿上洁白的婚纱嫁给自己心爱的人是每个女生的梦想&#xff0c;婚纱对于每一个女生来说都有着重要的意义&#xff0c;所以选择一件美丽且适合的婚纱非常重要&#xff0c;因此人们在选择婚纱时会花费很多的时间…

MySQL数据库之索引

目录 一、MySQL索引简介 二、索引的作用 1、优点 2、缺点 三、创建索引的原则依据 四、索引的分类和创建 1、普通索引 2、唯一索引&#xff08;创建唯一键即创建唯一索引&#xff09; 3、主键索引&#xff08;和创建主键的方式一样&#xff09; 4、组合索引&#xff…

Python标准库之copy

1. copy标准库简介 Python 中赋值语句不复制对象&#xff0c;而是在目标和对象之间创建绑定 (bindings) 关系。对于自身可变或者包含可变项的集合对象&#xff0c;我们有时会需要生成其副本用于改变操作&#xff0c;进而避免改变原对象。 2. copy常用函数 2.1 copy.copy(x) …

R语言用ARIMA模型滑动时间窗口识别网络流量时间序列异常值

全文链接&#xff1a;http://tecdat.cn/?p30597最近我们被要求解决时间序列异常检验的问题。有客户在使用大量的时间序列。这些时间序列基本上是每10分钟进行一次的网络测量&#xff0c;其中一些是周期性的&#xff08;即带宽&#xff09;&#xff0c;而另一些则不是&#xff…

Android Jetpack Compose——一个简单的聊天界面

Jetpack Compose——聊天界面前言效果视频引入RowColumnTextImage聊天界面效果左边布局右边布局插入数据总结前言 目前声明式UI已经成为前端开发趋势&#xff0c;除了一开始的跨端开发React,Flutter等以及Web支持外&#xff0c;后续Android和IOS平台也相继推出声明式开发&…

零基础快速开发Vue图书管理系统—登录注册篇(一)

零基础快速开发Vue图书管理系统—登录注册篇&#xff08;一&#xff09; 一、图书管理系统项目功能 二、项目技术选型 前端主要采用&#xff1a;Vue3.x (vuex/vue-router)、Ant Design Vue、Axios等服务端主要采用&#xff1a;Node.js、Koa、Mongoose等数据库主要采用&#x…

Docker安装Redis集群失败经历汇总

在程序员的开发过程中&#xff0c;Redis可以说基本上是必不可少的缓存中间件。不管是二进制包还是docker安装Redis的文章在网上都是数不胜数。我之前自己玩Redis的时候基本不是二进制包安装就是docker安装&#xff0c;也没有尝试过集群方式。每次需要的时候&#xff0c;网上百度…

DataFrame转化为json的方法教程

网络上有好多的教程&#xff0c;讲得不太清楚和明白&#xff0c;我用实际的例子说明了一下内容&#xff0c;附档代码&#xff0c;方便理解和使用 DataFrame.to_json(path_or_bufNone, orientNone, date_formatNone, double_precision10, force_asciiTrue, date_unitms, defau…

考研数据结构大题整合_组一(ZYL组)

考研数据结构大题整合 目录考研数据结构大题整合一、ZYL组ZYL组一ZYL组二ZYL组三ZYL组四ZYL组五ZYL组六ZYL组七ZYL组八一、ZYL组 ZYL组一 1.一棵树有度为i的结点ni 个(i1,2,3,…m), 求叶结点的个数.&#xff08;10分&#xff09; 2、已知带权连通图G(V,E)的邻接表如图所示&am…