链接:
https://leetcode-cn.com/problems/employee-importance/
描述:
示例和提示:
代码:
深度优先搜索遍历
找到主id然后遍历员工
遍历员工时,深入遍历这个员工,将这个员工所有importance找完然后找下一个员工
/*
// Definition for Employee.
class Employee {
public:
int id;
int importance;
vector<int> subordinates;
};
*/
class Solution {
public:
int DFS(unordered_map<int,Employee*>& info,int id)
{
int cur = info[id]->importance;
for(const auto& sid : info[id]->subordinates)
{
cur+=DFS(info,sid);
}
return cur;
}
int getImportance(vector<Employee*> employees, int id) {
if(employees.empty())
return 0;
unordered_map<int,Employee*> info;
for(const auto& e:employees)
{
info[e->id] = e;
}
return DFS(info,id);
}
};
广度优先搜索
运用队列的技术,将最开始的id先进队列
然后将这个id包含的所有id进队列
取出一个id就将这个id所包含的所有id入队列
类似:层序遍历
class Solution {
public:
int getImportance(vector<Employee*> employees, int id) {
unordered_map<int, Employee*> mp;
for (auto& employee : employees) {
mp[employee->id] = employee;
}
int total = 0;
queue<int> que;
que.push(id);
while (!que.empty()) {
int curId = que.front();
que.pop();
Employee* employee = mp[curId];
total += employee->importance;
for (int subId : employee->subordinates) {
que.push(subId);
}
}
return total;
}
};