【华为OD题库-050】树状结构查询-java

题目

通常使用多行的节点、父节点表示—棵树,比如:
西安 陕西
陕西 中国
江西 中国
中国 亚洲
泰国 亚洲
输入一个节点之后,请打印出来树中他的所有下层节点
输入描述
第一行输入行数,下面是多行数据,每行以空格区分节点和父节点
接着是查询节点
输出描述
输出查询节点的所有下层节点。以字典序排序
备注
树中的节点是唯一的,不会出现两个节点,是同一个名字
示例1:
输入
5
b a
c a
d c
e c
f d
c
输出
d
e
f

思路

简单递归题
先将输入转为map< String , List< String >>,key代表父节点,list代表子节点。有以下两种方案:

  1. 辅助队列法:将key找到的子节点列表加入辅助队列,依次出队,如果碰到某个节点还有子节点的,将它的子节点依次加入队列中
  2. 递归法:然后根据指定key找到子节点列表,如果子节点还有子节点,则递归加入。

题解

package hwod;import java.util.*;public class TreeStructSearch {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = Integer.parseInt(sc.nextLine());String[][] arrs = new String[n][2];for (int i = 0; i < n; i++) {arrs[i] = sc.nextLine().split(" ");}String key = sc.nextLine();List<String> res = treeStructSearch(arrs, key);for (int i = 0; i < res.size(); i++) {System.out.println(res.get(i));}}
//方案一,辅助队列实现private static List<String> treeStructSearch(String[][] arrs, String key) {Map<String, List<String>> map = new HashMap<>();for (int i = 0; i < arrs.length; i++) {List<String> oldlist = map.getOrDefault(arrs[i][1], new ArrayList<>());oldlist.add(arrs[i][0]);map.put(arrs[i][1], oldlist);}LinkedList<String> queue = new LinkedList<>();List<String> targetList = map.getOrDefault(key, new ArrayList<>());for (String s : targetList) {queue.addLast(s);}List<String> res = new ArrayList<>();while (!queue.isEmpty()) {String s = queue.pollFirst();res.add(s);List<String> subList = map.getOrDefault(s, new ArrayList<>());for (String sub : subList) {queue.addLast(sub);}}Collections.sort(res);return res;}
// 方案2,dfs递归private static List<String> ans = new ArrayList<>();private static List<String> treeStructSearch2(String[][] arrs, String key) {Map<String, List<String>> map = new HashMap<>();for (int i = 0; i < arrs.length; i++) {List<String> oldlist = map.getOrDefault(arrs[i][1], new ArrayList<>());oldlist.add(arrs[i][0]);map.put(arrs[i][1], oldlist);}dfs(map, key);Collections.sort(ans);return ans;}private static void dfs(Map<String, List<String>> map, String key) {if(!map.containsKey(key)) return;List<String> subList = map.get(key);for (int i = 0; i < subList.size(); i++) {ans.add(subList.get(i));dfs(map,subList.get(i));}}
}

推荐

如果你对本系列的其他题目感兴趣,可以参考华为OD机试真题及题解(JAVA),查看当前专栏更新的所有题目。

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

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

相关文章

真实的软件测试日常工作是咋样的?

最近很多粉丝问我&#xff0c;小姐姐&#xff0c;现在大环境不景气&#xff0c;传统行业不好做了&#xff0c;想转行软件测试&#xff0c;想知道软件测试日常工作是咋样的&#xff1f;平常的工作内容是什么&#xff1f; 别急&#xff0c;今天跟大家细细说一下一个合格的软件测…

WordPress:解决xmlrpc.php被扫描爆破的风险

使用WordPress的朋友都知道&#xff0c;一些【垃圾渣渣】会利用xmlrpc.php文件来进行攻击&#xff0c;绕过WP后台错误登录次数限制进行爆破。虽然密码复杂的极难爆破&#xff0c;但及其占用服务器资源。 方法一、利用宝塔防火墙&#xff08;收费版&#xff09; 一般可以直接使…

springboot(ssm电影播放平台 在线电影系统Java(codeLW)

springboot(ssm电影播放平台 在线电影系统Java(code&LW) 开发语言&#xff1a;Java 框架&#xff1a;ssm/springboot vue JDK版本&#xff1a;JDK1.8&#xff08;或11&#xff09; 服务器&#xff1a;tomcat 数据库&#xff1a;mysql 5.7&#xff08;或8.0&#xff09…

MySQL锁篇

目录 一、MySQL中的锁 1.1、全局锁 1.2、表级锁 1.2.1、表锁 1.2.2、元数据锁&#xff08;MDL&#xff09; 1.2.3、意向锁 1.2.4、AUTO-INC 锁 1.3、行级锁 1.3.2、Gap Lock 1.3.3、Next-Key Lock 1.3.4、插入意向锁 二、MySQL 是怎么加锁的&#xff1f; 2.1、为什…

2312skia,11管理颜色及下载等

管理颜色 Skia使用的所有颜色空间,通过如何从该颜色空间,转换为叫XYZD50的通用"连接"颜色空间,来描述自己.可从相同描述中,推导出如何从XYZD50空间转换回原颜色空间. XYZD50是像RGB一样以三维表示的颜色空间,但XYZ部分则根本不像RGB,而是这些通道的线性混杂.Y最接近…

使用ttyd为你的Anroid设备提供web版控制台

嵌入式Android设备&#xff0c;众所周知要调试要开adb&#xff0c;涉及到安全问题通常要走一系列流程&#xff0c;非常复杂&#xff0c;对于维护人员要求比较高。因此考虑有没有一个方便的调试手段。 此外&#xff0c;我们还需要考虑x86的嵌入式设备的方案&#xff0c;最好有类…

四、C语言数据类型和变量

目录 1. 数据类型介绍 1.1 字符型 1.2 整型 1.3 浮点型 1.4 布尔类型 1.5 各种数据类型的长度 1.5.1 sizeof 操作符 1.5.2 数据类型长度 2. signed 和 unsigned 3. 数据类型的取值范围 4. 变量 4.1 变量的创建 4.2 变量的分类 5. 算术操作符&#xff1a;、-、*、…

SpringBoot——Quartz 定时任务

优质博文&#xff1a;IT-BLOG-CN 一、Scheduled 定时任务 【1】添加Scheduled相关依赖&#xff0c;它是Spring自带的一个jar包因此引入Spring的依赖&#xff1a; <dependency><groupId>org.springframework</groupId><artifactId>spring-context-su…

MySQL图书管理系统(49-94)源码

-- 九、 子查询 -- 无关子查询 -- 比较子查询&#xff1a;能确切知道子查询返回的是单值时&#xff0c;可以用>&#xff0c;<&#xff0c;&#xff0c;>&#xff0c;<&#xff0c;!或<>等比较运算符。 -- 49、 查询与“俞心怡”在同一个部门的读者的借…

诊所小程序开发,需要包含哪些功能,有什么注意事项?

开发一个诊所预约小程序&#xff0c;可以提高口腔诊所的服务效率和客户体验。那么&#xff0c;一般小程序的流程和功能包含哪些内容&#xff1f; 注册登录&#xff1a;用户可以快速授权并登录(可定制多种登录方式) 预约挂号&#xff1a;用户可以选择科室、医生、日期和时段进行…

为什么不能用System.currentTimeMillis()计算执行时间?

1. 前提概要 System.currentTimeMillis()是系统时间&#xff0c;系统时间修改、闰秒会导致跳动。System.nanoTime()仅用于计算耗时&#xff0c;和系统时间没有强关联。System.nanoTime()单位是纳秒&#xff0c;但不保证有纳秒的精度&#xff0c;但保证精度至少比System.curren…

Unity中Shader指令优化(编译后指令解析)

文章目录 前言一、我们先创建一个简单的Shader二、编译这个Shader&#xff0c;并且打开1、编译后注意事项2、编译平台 和 编译指令数3、顶点着色器用到的信息4、顶点着色器计算的核心部分5、片元着色器用到的信息6、片元着色器核心部分 前言 我们先读懂Shader编译后代码&#…

Linux命令与shell脚本编程大全【读书笔记 + 思考总结】

Linux命令与shell脚本编程大全 第 1 章 初识Linux shellLinux的组成及关系结构图是什么&#xff1f;Linux系统内核的作用是什么&#xff1f;内核的主要功能是什么&#xff1f;&#xff08;4点&#xff09;物理内存和虚拟内存是什么关系&#xff1f;内核如何实现虚拟内存&#x…

php轻量级性能分析工具 xhprof

windows版本 下载xhprof 选择最新的DLL版本&#xff0c;我写的时候最新的DLL版本是 2.3.5&#xff0c;将里面的 php_xhprof.dll 文件复制到php的扩展目录ext中。下载tgz版本&#xff0c;在同一个位置下载最新版本的即可&#xff0c;主要原因是dll版本中缺少 xhprof_html 和 xh…

Swagger各版本访问地址

2.9.x 访问地址: http://ip:port/{context-path}/swagger-ui.html 3.0.x 访问地址: http://ip:port/{context-path}/swagger-ui/index.html 3.0集成knife4j 访问地址: http://ip:port/{context-path}/doc.html

Ubuntu中MySQL安装与使用

一、安装教程&#xff1a;移步 二、通过sql文件创建表格&#xff1a; 首先进入mysql&#xff1a; mysql -u 用户 -p 回车 然后输入密码source sql文件&#xff08;路径&#xff09;;上面是sql语句哈&#xff0c;所以记得加分号。 sql文件部分截图&#xff1a; 创建成功后的部…

【android开发-04】android中activity的生命周期介绍

1&#xff0c;返回栈 android中使用任务task来管理activity&#xff0c;一个任务就是一组存放在栈里的活动的集合&#xff0c;这个栈被称为返回栈。栈是一种先进先出的数据结构。当我们启动一个新的活动&#xff0c;他会在返回栈中人栈&#xff0c;并处以栈顶的位置&#xff0…

浮点运算误差

输出所有形如aabb的4位完全平方数&#xff08;即前两位数字相等&#xff0c;后两位数字也相等&#xff09; 解决这个问题首先需要表示aabb这个变量&#xff0c;只需要定义一个变量n存储即可&#xff0c;另一个问题就是如何判断n是否为完全平方数&#xff1f; 第一种思路是先求出…

【python学习】Python 线程编程(类内多线程编程)

Python线程编程&#xff08;类内多线程编程&#xff09; 文章目录 Python线程编程&#xff08;类内多线程编程&#xff09;多线程编程的函数Function级多线程编程class级多线程编程进阶 类内多线程 多线程可以同时执行一段代码的多个程序。使用多线程可能使程序运行速度更快。 …

前端常见Linux操作命令

压缩文件 压缩 dist文件为dist.tar.gz tar -czvf dist.tar.gz dist 解压文件 tar -xzvf dist.tar.gz 列出目前工作目录所含的文件及子目录 ls 显示当前目录中的所有文件和目录&#xff0c;包括隐藏文件 ls -a 显示文件和目录的详细信息 它以长格式显示目录内容&#xff0c;包…