[华为OD] B卷 树状结构查询 200

题目:

通常使用多行的节点、父节点表示一棵树,比如

西安 陕西

陕西 中国

江西 中国

中国 亚洲

泰国 亚洲

输入一个节点之后,请打印出来树中他的所有下层节点

输入描述

第一行输入行数,下面是多行数据,每行以空格区分节点和父节点

接着是查询节点

输出描述

输出查询节点的所有下层节点。以字典序排序Q

备注

树中的节点是唯一的,不会出现两个节点,是同一个名字

示例1:

输入

5

b a

c a

d c

e c

f d

c

输出

d

e

f

题解:

题目不难,就是构建一个树状的数据结构,只是遍历打印的时候需要注意下,如果子节点有多重树的话,先打印子节点,再打印子节点的子节点。

代码:

import java.util.*;public class TreeInfo {public static void main(String[] args) {Map<String, Tree> treeMap = new HashMap<>();Scanner sc = new Scanner(System.in);int lines = Integer.valueOf(sc.nextLine());for (int i = 0; i < lines; i++) {String[] treesInfo = sc.nextLine().split(" ");Tree tree = new Tree(treesInfo[1]);String child = treesInfo[0];if (treeMap.containsKey(tree.getParent())) {tree = treeMap.get(treesInfo[1]);tree.allChildRen(child);} else {tree.allChildRen(child);}treeMap.put(treesInfo[1], tree);}String treeNode = sc.nextLine();List<String> nextNodes = new ArrayList<>();printChild(treeNode, treeMap, nextNodes);}private static void printChild(String node, Map<String, Tree> treeMap, List<String> nextNodes) {List<String> children = treeMap.get(node).getChildren();for (String child : children) {System.out.println(child);if (treeMap.containsKey(child)) {nextNodes.add(child);}}if (nextNodes.size() > 0) {String newNode = nextNodes.get(0);nextNodes.remove(0);printChild(newNode, treeMap, nextNodes);}}private static class Tree {String parent;List<String> children;public Tree(String parent) {this.parent = parent;children = new ArrayList<>();}public String getParent() {return parent;}public void setParent(String parent) {this.parent = parent;}public List<String> getChildren() {return children;}public void setChildren(List<String> children) {this.children = children;}private void allChildRen(String child) {if (this.children != null && this.children.contains(child)) {return;} else {this.children.add(child);}}}
}

验证:

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

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

相关文章

C++青少年简明教程:基础知识

C青少年简明教程&#xff1a;基础知识 电脑程序设计&#xff08;Computer programming&#xff09;&#xff0c;或称程序设计&#xff08;programming&#xff09;&#xff0c;是给出解决特定问题程序的过程&#xff0c;程序设计往往以某种程序设计语言为工具&#xff0c;给出这…

1.4. 离散时间鞅-鞅的Lp收敛,鞅与停时 (1)

鞅的Lp收敛,鞅与停时 鞅的 L p L^p Lp收敛(

通过pywinauto和win32gui和pyautogui自动化实现批量导入

清空文件&#xff0c;两行以下的文件 import os# 要操作的文件路径 file_path example.txt# 删除文件 if os.path.exists(file_path):os.remove(file_path)# 重新创建文件 with open(file_path, w) as file:file.write() # 如果需要写入内容&#xff0c;可以在这里写入拆分文…

关于一致性,你该知道的事儿(上)

关于一致性&#xff0c;你该知道的事儿&#xff08;上&#xff09; 前言一、缓存一致性二、内存模型一致性三、事务一致性四、分布式事务一致性4.1 分布式系统的一些挑战4.2 关于副本的一些概念4.3 分布式事务之共识问题4. 3.1 PC(two-phase commit, 2PC)4.3.2 Raft 三、后记参…

公有云Linux模拟TCP三次挥手与四次握手(Wireshark抓包验证版)

目录 写在前面环境准备实验步骤1. 安装nc工具2. 使用nc打开一个连接2.1 公有云-安全组放行对应端口&#xff08;可选&#xff09; 3. 打开Wireshark抓包工具4. 新开终端&#xff0c;进行连接5. 查看抓包文件&#xff0c;验证TCP三次握手与四次挥手TCP三次握手数据传输TCP四次挥…

交叉编译编译ffmpeg:ERROR: x265 not found using pkg-config(未解决)

具体错误 ERROR: x265 not found using pkg-configIf you think configure made a mistake, make sure you are using the latest version from Git. If the latest version fails, report the problem to the ffmpeg-userffmpeg.org mailing list or IRC #ffmpeg on irc.lib…

gin:01-框架安装

概述 看下 Gin 框架的官方介绍&#xff1a; Gin 是一个用 Go (Golang) 编写的 web 框架。 它是一个类似于 martini 但拥有更好性能的 API 框架, 由于 httprouter&#xff0c;速度提高了近 40 倍。 如果你是性能和高效的追求者, 你会爱上 Gin。 是的&#xff0c;就是用 Gin 来写…

Netty源码分析二NioEventLoop 剖析

剖析方向 NioEventLoop是一个重量级的类&#xff0c;其中涉及到的方法都有很复杂的继承关系&#xff0c;调用链&#xff0c;要想把源码全部过一遍工作量实在是太大了&#xff0c;于是小编就基于下面的这些常见的问题来对NioEventLoop的源码来进行剖析 1.Seletor何时创建 1.1Se…

python删除一个文件夹所有文件

在Python中&#xff0c;可以使用os模块来删除一个文件夹中的所有文件&#xff0c;但保留文件夹本身。以下是一个简单的例子&#xff1a; import osdef delete_files_in_folder(folder_path):for filename in os.listdir(folder_path):file_path os.path.join(folder_path, fi…

2024OD机试卷-密码解密 (java\python\c++)

题目:密码解密 题目描述 给定一段“密文”字符串 s,其中字符都是经过“密码本”映射的,现需要将“密文”解密并输出。 映射的规则(‘a’ ~ ‘i’)分别用(‘1’ ~ ‘9’)表示;(‘j’ ~ ‘z’)分别用(“10*” ~ “26*”)表示。 约束:映射始终唯一。 输入描述 “…

【408真题】2009-08

“接”是针对题目进行必要的分析&#xff0c;比较简略&#xff1b; “化”是对题目中所涉及到的知识点进行详细解释&#xff1b; “发”是对此题型的解题套路总结&#xff0c;并结合历年真题或者典型例题进行运用。 涉及到的知识全部来源于王道各科教材&#xff08;2025版&…

TMS320F280049 CLB模块--LUT4 OUTLUT(4)

LUT4 示意图如下&#xff1a; OUTLUT 示意图如下&#xff1a; 寄存器 参考文档&#xff1a; TMS320F28004x Real-Time Microcontrollers Technical Reference Manual (Rev. G)

Java spring boot注解@RequestParam

RequestParam 是 Spring MVC 中的一个注解&#xff0c;它用于从 HTTP 请求的参数中提取数据&#xff0c;并绑定到控制器方法的参数上。这个注解通常用在方法的参数上&#xff0c;以表示该参数的值应该从 HTTP 请求的参数中获取。 以下是一些关于 RequestParam 的关键点&#x…

【设计模式】之适配器模式

系列文章目录 &#xff08;其他设计模式可以到 &#x1f449;&#x1f449;&#x1f449;&#xff09;设计模式_小杰不秃头的博客 &#x1f60a;&#x1f604;&#x1f61b; 前言 今天继续给大家介绍23种设计模式中的适配器模式&#xff0c;这个模式相比于其他模式比较好理解…

【数据结构】图的应用---最小生成树(Prim,Kruskal)、最短路径(BFS,Dijkstra,Floyd)、拓扑排序、关键路径、有向无环图表达式

文章目录 5.图的应用5.1 最小生成树5.1.1 Prim算法5.1.2 Kruskal算法5.1.3 最小生成树代码A.邻接矩阵B.邻接表 5.2 最短路径5.2.1 BFS5.2.2 Dijkstra5.2.3 Floyd5.2.4 三种算法的比较 5.3 有向无环图描述表达式5.4 拓扑排序5.5 关键路径 5.图的应用 5.1 最小生成树 定义 对一个…

模型推导:BG/NBD(预测用户生命周期(CLV)模型)

CLV&#xff08;Customer Lifetime Value&#xff09;指的是客户生命周期价值&#xff0c;用以衡量客户在一段时间内对企业有多大的价值。企业对每个用户的流失与否、在未来时间是否会再次购买&#xff0c;还会再购买多少次才会流失等问题感兴趣&#xff0c;本文中的BG/NBD模型…

Linux|进程控制

进程创建 fork函数初识 在linux中fork函数时非常重要的函数&#xff0c;它从已存在进程中创建一个新进程。新进程为子进程&#xff0c;而原进程为父进程。 返回值&#xff1a;子进程中返回0&#xff0c;父进程返回子进程id&#xff0c;出错返回-1 进程调用fork&#xff0c;当…

Spring底层入门篇-前言

从2024-04-13至2024-05-12&#xff0c;历时一个月时间&#xff0c;Spring底层入门篇全部完成&#xff0c;共计十一篇。该系列的定位是&#xff1a;主线取材于B站某马的教学视频&#xff0c;再加上个人的理解的学习笔记。 该系列的原标题是Spring高级篇&#xff0c;但是在某一天…

AVL 树的理解和简单实现

目录 1. AVL 树 1.1. AVL 树的概念 1.2. AVL 树的性质 2. AVL 树的框架如下 2. AVL树的 插入 2.1. 平衡因子的更新 2.2.1. 平衡因子更新的第一种情况 2.2.2. 平衡因子更新的第二种情况 2.2.3. 平衡因子更新的第三种情况 2.2.4. 平衡因子更新的代码框架如下 2.2. AV…

《C++学习笔记---初阶篇6》---string类 上

目录 1. 为什么要学习string类 1.1 C语言中的字符串 2. 标准库中的string类 2.1 string类(了解) 2.2 string类的常用接口说明 2.2.1. string类对象的常见构造 2.2.2. string类对象的容量操作 2.2.3.再次探讨reserve与resize 2.2.4.string类对象的访问及遍历操作 2.2.5…