[M设计] lc1600. 皇位继承顺序(dfs+哈希表建多叉树+设计+阅读理解)
Posted Ypuyu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[M设计] lc1600. 皇位继承顺序(dfs+哈希表建多叉树+设计+阅读理解)相关的知识,希望对你有一定的参考价值。
1. 题目来源
链接:1600. 皇位继承顺序
2. 题目解析
阅读理解题目,看了样例解释一下就懂了。
其实就是个多叉树,然后返回它的前序遍历。其中有些节点死了**,打个标记跳过他就行了。**
这里所有参数名字都不同,可以使用 unordered_map<string, vector<string>>
作为建树,string
作为父节点,vector<string>
存储它下面的所有子节点就行了。且在大量出生情况下,需要加节点进树中
有节点 死了,不用真的从树里删除,不用调整树的结构,只需要针对这个节点打个标记,前序遍历的时候跳过它就行了。
时间复杂度: O ( n ) O(n) O(n)
空间复杂度: O ( n ) O(n) O(n)
class ThroneInheritance {
public:
unordered_set<string> dead;
unordered_map<string, vector<string>> family;
string root;
ThroneInheritance(string kingName) {
root = kingName;
}
void birth(string parentName, string childName) {
family[parentName].push_back(childName);
}
void death(string name) {
dead.insert(name);
}
void dfs(vector<string>& res, string root) {
if (!dead.count(root))
res.push_back(root);
for (auto s : family[root])
dfs(res, s);
}
vector<string> getInheritanceOrder() {
vector<string> res;
dfs(res, root);
return res;
}
};
/**
* Your ThroneInheritance object will be instantiated and called as such:
* ThroneInheritance* obj = new ThroneInheritance(kingName);
* obj->birth(parentName,childName);
* obj->death(name);
* vector<string> param_3 = obj->getInheritanceOrder();
*/
以上是关于[M设计] lc1600. 皇位继承顺序(dfs+哈希表建多叉树+设计+阅读理解)的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode 1600 皇位继承顺序[多叉树 递归] HERODING的LeetCode之路
LeetCode 483. 最小好进制(数学) / 1239. 串联字符串的最大长度 / 1600. 皇位继承顺序(多叉树) / 401. 二进制手表
2021/6/20 刷题笔记皇位继承顺序与多叉树前序遍历,以及python defaultdict