难度:中等。
标签:树,设计。
今日份的阅读理解!!
看了下题解的数据存储方式,使用map连表示父子关系,用set来标记死亡的人,最终就是一个多叉树的前序遍历。
正确解法:
class ThroneInheritance {
unordered_map<string, vector<string>> edges;
unordered_set<string> dead;
string king;
public:
ThroneInheritance(string kingName) {
king = kingName;
}
void birth(string parentName, string childName) {
edges[parentName].emplace_back(childName);
}
void death(string name) {
dead.insert(name);
}
vector<string> getInheritanceOrder() {
vector<string> orders;
stack<string> stk;
stk.push(king);
while(!stk.empty()){
string now = stk.top();
stk.pop();
if(dead.find(now) == dead.end()){
orders.emplace_back(now);
}
for(int i = edges[now].size() - 1; i >= 0 ; --i){
stk.push(edges[now][i]);
}
}
return orders;
}
};
结果: