[JLU] 数据结构与算法上机题解思路分享-第二次上机

news/2024/7/7 19:19:47/文章来源:https://www.cnblogs.com/luyaoqi/p/18277123

前言

首先,请务必自己尽全力尝试实现题目,直接看成品代码,思维就被拘束了,也很容易被查重。

这里只是思路解析的博客,代码仓库在 JLU_Data_Structures_Record

希望你能在这里找到你想要的:)

正文


A 二叉树的创建与遍历

分数 10
作者 朱允刚
单位 吉林大学
通过带空指针信息的先根序列(亦称先序序列)创建二叉树,并进行先根(先序)、中根(中序)、后根(后序)遍历。二叉树结点数据域值为不等于0的整数(可能是正数也可能是负数),空指针用0表示,例如1 5 8 0 0 0 6 0 0表示如下图的二叉树。

输入格式:
输入为一组用空格间隔的整数,表示带空指针信息的二叉树先根序列。其中空指针信息用0表示。二叉树结点个数不超过150000,高度不超过6000。输入数据保证二叉树各结点数据值互不相等。

输出格式:
输出为3行整数,每个整数后一个空格。第1行为该二叉树的先根序列,第2行为中根序列,第3行为后根序列。

输入样例:
1 5 8 0 0 0 6 0 0
输出样例:
1 5 8 6
8 5 1 6
8 5 6 1
代码长度限制
16 KB
时间限制
200 ms
内存限制
20 MB


这道题没什么好解析的,从先根序列造二叉树,可以采用递归的方法,0则结束,否则就以该值创节点,并进入左节点的函数和右节点的函数。


B 二叉树查找结点及父结点

分数 10
作者 朱允刚
单位 吉林大学
编写程序在二叉树中查找给定结点及父结点。二叉树结点的数据域值不等于0的整数。

输入格式:
输入第1行为一组用空格间隔的整数,表示带空指针信息的二叉树先根序列,其中空指针用0表示。例如1 5 8 0 0 0 6 0 0表示如下图的二叉树。第2行为整数m,表示查询个数。接下来m行,每行为一个不等于0的整数K,表示要查找的结点的数据值。m不超过100,二叉树结点个数不超过150000,高度不超过6000。输入数据保证二叉树各结点数据值互不相等。

输出格式:
输出为m行,每行1个整数,表示被查找结点K的父结点数据值,若二叉树中无结点K或结点K无父结点,则输出0。

输入样例:
1 5 8 0 0 0 6 0 0
3
8
1
6
输出样例:
5
0
1
代码长度限制
16 KB
时间限制
300 ms
内存限制
20 MB


造树的函数可以复用上一题,本体考察的查找,更没有啥可以说的,你可以任选先、中、后三种顺序都可以


C 二叉树删除子树

分数 10
作者 朱允刚
单位 吉林大学
编写程序对给定二叉树执行若干次删除子树操作,输出每次删除子树后剩余二叉树的中根序列。二叉树结点的数据域值为不等于0的整数。每次删除操作是在上一次删除操作后剩下的二叉树上执行。

输入格式:
输入第1行为一组用空格间隔的整数,表示带空指针信息的二叉树先根序列,其中空指针信息用0表示。例如1 5 8 0 0 0 6 0 0表示如下图的二叉树。第2行为整数m,表示要进行的删除操作次数。接下来m行,每行一个不等于0的整数K,表示要删除以K为根的子树。m不超过100,二叉树结点个数不超过5000。输入数据保证各结点数据值互不相等,且删除子树后二叉树不为空。

输出格式:
输出为m行,每行为一组整数,表示执行删除操作后剩余二叉树的中根序列(中根序列中每个整数后一个空格)。若要删除的子树不在当前二叉树中,则该行输出0(0后无空格)。

输入样例:
1 5 8 0 0 0 6 0 0
3
5
8
6
输出样例:
1 6
0
1
代码长度限制
16 KB
时间限制
100 ms
内存限制
10 MB


此题可以分解为两部分,第一部分是找到要删的点,第二部分是执行删除。寻找部分就是第二题,那么我们实际上可以专注于如何执行二叉树的删除了。

那么什么是删除呢?可表现为其父节点对应指针为空,那么空间要不要释放呢?随你喜欢,毕竟答案检验是遍历,与内存无关:)所以把父节点对应指针置空即可。

整体的构造是递归,若没找到则向两子树找,找到就删除对应子树,没找到回报个0


D 重建二叉树

分数 30
作者 朱允刚
单位 吉林大学
给定非空二叉树的中根序列和后根序列,请编写程序创建该二叉树,计算其高度和先根序列;如给定的中根和后根序列不合法,则亦能识别。

输入格式:
输入包含多组数据(不超过10组),每组为两行字符串,第一行表示某二叉树的后根序列,第二行表示其中根序列。结点的值均为A-Z的大写字母,故二叉树结点个数不超过26,且保证输入的两个序列都是结点的全排列,但不一定是合法的中根和后根序列。输入保证不是空二叉树。

输出格式:
对于每组数据,如果输入的序列不合法(不是同一棵树的中根序列和后根序列),则输出INVALID;若输入序列合法,输出为两行,第一行为一个整数,表示该二叉树的高度,第二行为一个字符串,表示该二叉树的先根序列。

输入样例1:
CEFDBHGA
CBEDFAGH
CBEDFAGH
CEFDBHGA
BCA
CAB

输出样例1:
3
ABCDEFGH
INVALID
INVALID

代码长度限制
16 KB
时间限制
50 ms
内存限制
64 MB


本题也是书上有的内容此处就简单叙述下要点,中根和后根序列分别给了不同的信息,后根的最后一个表示该树的中点,也就是最上面那个,根据中点就可以从中根序列中找到该树的左子树有什么点,右子树有什么点。

而这样的分割可以不断递归,毕竟一个二叉树的左子树也是二叉树,只要不断地将子树的中后序列分割出来,总有左右子树只剩一点或者无点的情况,然后再不断组装回去,最后就得到了二叉树


E 二叉树路径和

分数 20
作者 朱允刚
单位 吉林大学
编写程序找出二叉树中和最大的路径,二叉树结点为不等于0的整数。本题的“路径”限定为以根结点为起点,以叶结点为终点的路径。路径的和,即该路径所包含的所有结点的数据值之和。

输入格式:
输入为一组用空格间隔的整数,个数不超过100个,表示带空指针信息的二叉树先根序列。

输出格式:
输出为两行,第一行为该二叉树路径和的最大值,第二行为一组整数,每个整数后一个空格,即该最大路径包含的结点值(按从根的叶的顺序),如果存在多条满足条件路径,则输出最左边一条。

输入样例1:
1 2 0 0 3 0 0
输出样例1:
4
1 3
输入样例2:
-1 2 0 0 3 0 0
输出样例2:
2
-1 3
代码长度限制
16 KB
时间限制
50 ms
内存限制
64 MB


像这种寻找一条最优路的方法,基础办法有深度优先算法DFS或广度优先算法BFS。

以DFS为例,大致就是用栈(其实就是一个数组加指针)来记录路径,然后遍历一遍二叉树,以DFS或BFS的方式,到底时与已有路径记录比较,保留更大的


F 哈夫曼树编码

此题不做分享,毕竟陆爻齐也差一个点,没资格说话


G S遍历

分数 30
作者 朱允刚
单位 吉林大学
二叉树的“S遍历”定义为从根结点开始,先自右向左遍历,然后下一层自左向右遍历,再下一层自右向左遍历,以此类推…。例如下图所示二叉树的S遍历序列为1 2 3 6 5 4 7 8。现给定一棵非空二叉树,结点数据域值为互不相等且不等于0的正整数,同时给定两个正整数a和b,请编写程序输出结点a和b间的S遍历序列。

555.jpg

输入格式:
输入第一行为1组用空格间隔的正整数,表示带空指针信息的二叉树先根序列,二叉树结点个数不超过150000,高度不超过5000。第二行为两个正整数a和b,含义如题目所述,保证a和b一定在二叉树中,且在S遍历序列中a在b的前边。

输出格式:
输出为一行整数,每个整数后一个空格,表示数据值为a和b的两个结点间的S遍历序列。

输入样例1:
1 2 4 0 0 0 3 5 7 0 0 8 0 0 6 0 0
1 8
输出样例1:
1 2 3 6 5 4 7 8
输入样例2:
1 2 0 4 0 7 0 0 3 5 0 0 6 8 20 0 0 21 0 0 0
6 8
输出样例2:
6 5 4 7 8
输入样例3:
1 2 0 3 4 5 0 0 6 0 0 0 7 0 8 9 10 0 0 11 0 0 0
1 11
输出样例3:
1 2 7 8 3 4 9 11
输入样例4:
2 4 3 0 0 8 0 0 10 5 7 9 0 0 1 0 0 17 0 0 6 0 0
2 9
输出样例4:
2 4 10 6 5 8 3 7 17 1 9
数据规模:
测试点0-2、5-9:结点个数≤50,树高≤20
测试点3:4500≤结点个数≤5500,4000≤树高≤5000
测试点4:130000≤结点个数≤150000,10≤树高≤20

代码长度限制
16 KB
时间限制
100 ms
内存限制
20 MB


此题看似是一个十分繁琐的搜索,但其实就是考察对于基本数据结构栈和队列的用法。

陆爻齐采用了栈来解决该问题,也就是用两个栈,分别存储向左和向右遍历时存储的点,然后向左向右分别用不同的顺序把点加进栈,模拟出所谓的S型


H 衣服挂游戏

分数 20
作者 朱允刚
单位 吉林大学
有n个衣服挂,编号为1至n,初始时按顺序挂在一个晾衣杆上,每个衣挂自成一列(即相当于有n列,每列只含一个衣挂)。

1.jpg

爸爸让艾迪做如下操作“x y”,表示将衣挂x所在的列放在衣挂y所在的列下面,即把x所在列的第一个衣挂,挂在y所在列的最下面的衣挂下面,如果x和y已在同一列里,则忽略该操作。例如上图执行操作“3 5”后,得到下图:

2.jpg

再执行操作“3 2”后,得到下图:

3.jpg

爸爸给出一系列指令,请编写程序,输出艾迪完成爸爸的所有操作后,每个衣挂所在的列的第一个衣挂的编号。

输入格式:
每个测试点包含多组测试数据,第一行1个整数 T ,表示测试数据组数。对于每组数据,第一行两个整数 n 和 m,分别表示衣挂个数和操作次数。接下来 m 行,每行两个整数x和y,表示爸爸让艾迪执行的一个操作。T≤5,1≤n, m≤30000,1≤x, y≤n。

输出格式:
输出为T 行,每行为 n个整数a1 a2 … an ,每个整数后一个空格,ai(1≤i≤n)表示衣挂i所在列的第一个衣挂的编号。

输入样例:
2
4 2
2 1
4 3
5 4
1 2
2 3
4 5
1 3

输出样例:
1 1 3 3
3 3 3 5 5

代码长度限制
16 KB
时间限制
80 ms
内存限制
64 MB


该题的本质是考察并查集的创建和使用,像这种很喜欢溯源的,并查集往往都能比较好的解决。

再简单说下陆爻齐认为的并查集吧,并查集往往用数组实现,用下标表示其编号,而存储的数字则为其父亲的编号,也就是父节点的下标。

题中正好n个衣架,编号1-n,正好对应数组,把x挂y上,完全可以把x上的数字改成y;这是x无父节点的情况,若x有父节点,当然先要追溯到其曾曾祖父,把老人家挂y上。


小结

这次上机主要考查了二叉树的创建、查找、删除等,还有并查集的使用,利用上机题巩固所学不失为一种好方法:)

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

docker 基础学习--尚硅谷教程

1、新建、启动容器docker run [OPTIONS] IMAGE [COMMAND] [ARG...] 2、列出当前所有正在运行的容器docker ps [OPTIONS] 3、退出容器4、重启、退出、删除容器 5、启动守护式容器 docker 常见命令

Bruno安装使用

下载地址直接解压,右键Bruno.exe创建快捷方式创建集合右键集合,New Request指定名称和url指定参数保存并测试

《与光重聚》 —— 属于他的夏日花火

题目是歌曲名称,from 《夏日花火》 (国产galgame ; 视觉小说「夏日花火」原声音乐集 - dizzylab PV视频 因为被平衡树制裁了,所以心血来潮写这篇文章,姑且算是练笔吧(毕竟好久不写鲜花了; 游戏本体发行时间:2022年10月28日,目前无DLC(永远的遗憾; 游戏背景设计是D…

玄机-第一章 应急响应-Linux日志分析

玄机-第一章 应急响应-Linux日志分析 账号root密码linuxrz ssh root@IP 1.有多少IP在爆破主机ssh的root帐号,如果有多个使用","分割 2.ssh爆破成功登陆的IP是多少,如果有多个使用","分割 3.爆破用户名字典是什么?如果有多个使用","分割 4.登陆…

使用 .NET 构建 UI 界面的各种方式

微软搞出了很多构建 UI 程序的框架,如 WinForms WPF WinUI MAUI,他们之间的简单对比可以看如下这篇官方文档 Overview of framework options - Windows apps | Microsoft Learn 本文主要是记录一下在搜索相关问题时,了解到的内容,不一定准确,如果发现错误,请留言补充。 1…

Docker详细安装教程

安装Docker: # 1,, 卸载旧的版本# 2,需要的安装 yum install -y yum-utils# 3, 设置镜像的仓库 https://blog.csdn.net/qq_43168442/article/details/116770163 (访问这个博客网站进行配置)# 更新yum软件包索引 yum makecache fast# 4,安装docker docker-ce 社区 ee企业…

详细讲解 Keil Pack Installer,以及通过 Keil 官网获取 Pack

前言 大家好,我是梁国庆。 收到粉丝留言,说 Keil 安装 Pack 不太明白,可不可以详细演示一下?当然可以有,直接视频+文章全部安排,我就是宠粉。 PS:第一次录视频有些紧张,见谅哈。微信视频号:https://weixin.qq.com/sph/AXbpYwEaw b站:https://www.bilibili.com/video…

webdav协议及我的笔记方案(私有部署)

背景 用markdown用于文章写作,有几年时间了,不是很喜欢折腾,主要就是在电脑上写,用的笔记软件就是typora。由于里面有很多工作相关的,以及个人资料相关的(包含了各种账号、密码啥的),所以不敢往各种云服务上放,还是想着数据由自己来管着。 自己管数据的话,就是数据存…

模拟集成电路设计系列博客——8.3.2 PLL中的抖动与相位噪声

8.3.2 PLL中的抖动与相位噪声 在PLL中有若干种抖动源,具体来说包括:输入参考的抖动\(\phi_{in}\) VCO中的抖动 环路滤波器产生的噪声 分频器产生的噪声由于任何实际PLL中的抖动都相对较小,因此分析其在环路中和环路内的传播可以使用线性小信号模型。上面列出的噪声源出现在环…

【git】github如何上传超过100MB大小的单个文件

在使用 GitHub 进行版本控制时,默认情况下,单个文件的大小限制为 100MB。 如果你需要上传超过这个大小的文件,可以使用 Git LFS(Large File Storage)。 Git LFS 是一种 Git 扩展,专门用于处理大文件,它将大文件替换为轻量级的指针,并将实际的文件内容存储在远程服务器上…

ros2 - microros - 雷达 -可视化点云

上一节完成了指定角度距离的测量这一节我们将其合成ROS的laserscan消息,并将其通过microros发布到上位机,最终实现rviz2的可视化。 一、雷达消息介绍使用指令ros2 interface show sensor_msgs/msg/LaserScan,可以看到ROS2对雷达数据接口的定义。# Single scan from a planar…

玄机流量特征分析-蚁剑流量分析

玄机流量特征分析-蚁剑流量分析 1.木马的连接密码是多少 2.黑客执行的第一个命令是什么 3.黑客读取了哪个文件的内容,提交文件绝对路径 4.黑客上传了什么文件到服务器,提交文件名 5.黑客上传的文件内容是什么 6.黑客下载了哪个文件,提交文件绝对路径1.过滤http,发现连接密码…

F407在RAM中调试

在RAM中调试代码 一.软硬件操作 硬件方面需要先修改BOOT0和BOOT1的引脚的高低电平。SRAM运行模式BOOT0和BOOT1都是高电平。软件方面: 1.需要先取消勾选Use Memory Layout from Target Dialog,点击下方的Edit编辑.sct2.修改.sct分散加载文件 原始文件 LR_IROM1 0x08000000 0x0…

制作badusb上线CS

‍ 前言在2014年美国黑帽大会上,安全研究人员JakobLell和独立安全研究人员Karsten Nohl展示了他们称为“BadUSB”的攻击方法,这种攻击方法让USB安全和几乎所有和USB相关的设备(包括具有USB端口的电脑)都陷入相当危险的状态现在的USB设备很多,比如语音视频设备、摄像头等,因…

【数据结构】常见的几种数据结构

常见的数据结构:数组、链表、队列、栈、、堆、二叉树、B树、哈希表、图 数组 因为数组内的元素是连续存储的,所以数组中元素的地址,可以通过其索引计算出来。根据索引查找元素,时间复杂度是 \(O(1)\)。 动态数组动态数组具体代码实现 import java.util.Arrays; import java…

QT6.7.2 MSVC源码编译 静态库 动态库

QT6.7.2 MSVC源码编译 静态库 动态库 也可以参考官方的文档 https://doc.qt.io/qt-6/build-sources.html 环境搭建 为了操作更有可复制性,这里在虚拟机中采用全新安装的系统进行配置。 系统镜像为:en-us_windows_10_enterprise_ltsc_2021_x64_dvd_d289cf96_2.iso 安装 Visual…

CPU管理 多进程图像

CPU管理 && 多进程图像 要管理CPU,先要学会使用CPU CPU的工作方式在操作系统学习之初就已经提过:取值执行程序存放在内存中,每段指令对应一个地址 CPU发出取指命令,将想取地址通过地址总线传到PC 内存根据地址取出对应地址的指令 从总线传回,CPU解释执行总之,就是…

电子显微镜对生物的观察

某黄色小虫,大概 \(100μm \times 400μm\) 的样子。

ARM Cortex-A 与 STM32 F107

ARM Cortex-A 和 STM32 F107 是两种不同的微控制器架构,它们在性能、应用场景和硬件支持方面有很大的差异。以下是它们的详细比较和分析: 1. 基本特性比较ARM Cortex-A 系列ARM Cortex-A 是 ARM 架构中的高级应用处理器系列,专为复杂的计算任务和高级应用设计。它广泛用于智…