当前位置:   article > 正文

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

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

题目:

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

西安 陕西

陕西 中国

江西 中国

中国 亚洲

泰国 亚洲

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

输入描述

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

接着是查询节点

输出描述

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

备注

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

示例1:

输入

5

b a

c a

d c

e c

f d

c

输出

d

e

f

题解:

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

代码:

  1. import java.util.*;
  2. public class TreeInfo {
  3. public static void main(String[] args) {
  4. Map<String, Tree> treeMap = new HashMap<>();
  5. Scanner sc = new Scanner(System.in);
  6. int lines = Integer.valueOf(sc.nextLine());
  7. for (int i = 0; i < lines; i++) {
  8. String[] treesInfo = sc.nextLine().split(" ");
  9. Tree tree = new Tree(treesInfo[1]);
  10. String child = treesInfo[0];
  11. if (treeMap.containsKey(tree.getParent())) {
  12. tree = treeMap.get(treesInfo[1]);
  13. tree.allChildRen(child);
  14. } else {
  15. tree.allChildRen(child);
  16. }
  17. treeMap.put(treesInfo[1], tree);
  18. }
  19. String treeNode = sc.nextLine();
  20. List<String> nextNodes = new ArrayList<>();
  21. printChild(treeNode, treeMap, nextNodes);
  22. }
  23. private static void printChild(String node, Map<String, Tree> treeMap, List<String> nextNodes) {
  24. List<String> children = treeMap.get(node).getChildren();
  25. for (String child : children) {
  26. System.out.println(child);
  27. if (treeMap.containsKey(child)) {
  28. nextNodes.add(child);
  29. }
  30. }
  31. if (nextNodes.size() > 0) {
  32. String newNode = nextNodes.get(0);
  33. nextNodes.remove(0);
  34. printChild(newNode, treeMap, nextNodes);
  35. }
  36. }
  37. private static class Tree {
  38. String parent;
  39. List<String> children;
  40. public Tree(String parent) {
  41. this.parent = parent;
  42. children = new ArrayList<>();
  43. }
  44. public String getParent() {
  45. return parent;
  46. }
  47. public void setParent(String parent) {
  48. this.parent = parent;
  49. }
  50. public List<String> getChildren() {
  51. return children;
  52. }
  53. public void setChildren(List<String> children) {
  54. this.children = children;
  55. }
  56. private void allChildRen(String child) {
  57. if (this.children != null && this.children.contains(child)) {
  58. return;
  59. } else {
  60. this.children.add(child);
  61. }
  62. }
  63. }
  64. }

验证:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/557205
推荐阅读
相关标签
  

闽ICP备14008679号