DFS

发布时间 2023-09-14 13:04:36作者: 爱新觉罗LQ

DFS

261. 树状结构查询

import java.util.Scanner;
import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    static Map<String, Set<String>> map = new HashMap<>();  //  使用 set 避免录入重复信息
    static StringBuilder sb = new StringBuilder();

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int row = Integer.parseInt(in.nextLine());
        for (int i = 0; i < row; i++) {
            String[] split = in.nextLine().split(" ");
            String son = split[0];
            String father = split[1];
            Set<String> orDefault = map.getOrDefault(father, new HashSet<>());
            orDefault.add(son);
            map.put(father, orDefault);
        }
        String target = in.nextLine();
        select(target);
        String[] split = sb.toString().trim().split(" ");
        String[] res = Arrays.copyOfRange(split, 1, split.length);  //  截断首个
        Arrays.sort(res);
        for (String re : res) {
            System.out.println(re);
        }
    }

    public static void select(String str){
        sb.append(str + " ");   //  递归查找!!!
        if (!map.containsKey(str)){
            return;
        }
        Set<String> set = map.get(str);
        for (String s : set) {
            select(s);
        }
    }
}