class Employee {
// It’s the unique id of each node;
// unique id of this employee
public int id;
// the importance value of this employee
public int importance;
// the id of direct subordinates
public List subordinates;
}
public class getImportance {
public int getImportance(List<Employee> employees, int id) {
int sum = 0; // 存储所求员工重要性变量
Queue<Integer> queue = new LinkedList<>();
queue.offer(id); // 将目标 id 添加到队列结尾,这里用的是队列操作,不是链表
for (int i = 0; i < employees.size(); i++) {
if (id == employees.get(i).id) {
System.out.println(employees.get(i).importance);
sum += employees.get(i).importance;
// 目标下属的id 进队列
if (employees.get(i).subordinates != null) {
for (int j = 0; j < employees.get(i).subordinates.size(); j++) {
queue.offer(employees.get(i).subordinates.get(j));
}
}
if (!queue.isEmpty()) {
queue.poll(); // 找到并删除队头
}
if (!queue.isEmpty()) {
id = queue.peek(); // 找到并不删除队头
i = -1; // 每一个员工都要从第一个开始找
}
}
}
return sum;
}
}