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);
}
}
}