import java.util.*;
/**
* 1600. 皇位继承顺序
*
* 重点:理解题意,多读题,反复读题,结合测试用例理解题目
* 多叉树的前序遍历
*
*/
public class Solution1600 {
public static class ThroneInheritance {
private Map<String, List<String>> edges;
private Set<String> dead;
private String king;
public ThroneInheritance(String kingName) {
edges = new HashMap<>();
dead = new HashSet<>();
king = kingName;
}
public void birth(String parentName, String childName) {
List<String> children = edges.getOrDefault(parentName, new ArrayList<>());
children.add(childName);
edges.put(parentName, children);
}
public void death(String name) {
dead.add(name);
}
public List<String> getInheritanceOrder() {
List<String> res = new ArrayList<>();
preorder(res, king);
return res;
}
private void preorder(List<String> res, String name) {
if (!dead.contains(name)) {
res.add(name);
}
List<String> children = edges.getOrDefault(name, new ArrayList<>());
for (String str : children) {
preorder(res, str);
}
}
}
}
LeetCode --1600. 皇位继承顺序
最新推荐文章于 2021-07-17 10:16:23 发布