仅仅只调用10次get获取顺序,说明顺序可以每次调用的时候现算出来。
一个国王可有有N个孩子,这里表示这种关系的数据结构是N叉树,这里我们不需要去用指针实现一颗N二叉树,可以用hashmap邻接表的方法实现N叉树(类似于图),同时涉及到dead,我们也不需要删除节点,只需要维护一个set软删除。获得顺序即是一次dfs即可。代码:
class ThroneInheritance {
private:
unordered_map<string, vector<string>> children;
unordered_set<string> dead;
string king;
vector<string> order;
void dfs(string name) {
for(auto child : children[name]) {
if(!dead.count(child)) {
order.push_back(child);
}
dfs(child);
}
}
public:
ThroneInheritance(string kingName) {
king = kingName;
}
void birth(string parentName, string childName) {
children[parentName].push_back(childName);
}
void death(string name) {
dead.insert(name);
}
vector<string> getInheritanceOrder() {
order.clear();
if(!dead.count(king)) {
order.push_back(king);
}
dfs(king);
return order;
}
};