当前位置: 首页 > news >正文

[华为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.lryc.cn/news/345039.html

相关文章:

  • 基于机器学习的学生学习行为自主评价设计与实现
  • toml与json联系对比
  • (已解决)org.springframework.amqp.rabbit.support.ListenerExecutionFailedException
  • 基于FPGA的数字信号处理(9)--定点数据的两种溢出处理模式:饱和(Saturate)和绕回(Wrap)
  • 基于STM32的宠物箱温度湿度监控系统毕业设计
  • Linux sudo 指令
  • 【NumPy数组】:深入了解numpy.linspace()函数
  • 计算机网络实验二:交换机的基本配置与操作
  • 宏的优缺点?C++有哪些技术替代宏?(const)权限的平移、缩小
  • 2024数维杯数学建模选题建议及各题思路来啦!
  • centos的常用命令
  • 【Android】使用Handler实现一个定时器
  • Java | Leetcode Java题解之第80题删除有序数组中的重复项II
  • java后端15问!
  • OmniPlan Pro 4 for Mac中文激活版:项目管理的新选择
  • 二叉树的广度优先遍历 - 华为OD统一考试(D卷)
  • 代码随想录-算法训练营day31【贪心算法01:理论基础、分发饼干、摆动序列、最大子序和】
  • 如何使用Transformer-TTS语音合成模型
  • 【Python】JSON数据的使用
  • C语言头文件的引入使用<>和““有什么区别
  • Qt 类的设计思路详解
  • 五一超级课堂---Llama3-Tutorial(Llama 3 超级课堂)---第一节 Llama 3 本地 Web Demo 部署
  • Redis20种使用场景
  • vue3获取原始值
  • “感恩遇到你,郭护士!”佛山市一医院 护士回家途中救了位老奶奶
  • Java面试常见问题
  • 概率论 科普
  • 全面解读快递查询API接口,帮你轻松查询快递物流信息
  • 【图书推荐】《JSP+Servlet+Tomcat应用开发从零开始学(第3版)》
  • C++容器——set