題目地址:
https://www.lintcode.com/problem/employee-importance/description
給定一個Employee類的列表,Employee有三個變量,兩個int型變量分別是id和importance,還有一個Employee列表的變量,內容是其下屬的id。給定一個employee的id,要求返回其與其所有下屬(直接的間接的都算)的importance總和。
思路是DFS,本質上是多叉樹的深搜。代碼如下:
import java.util.List;
public class Solution {
/**
* @param employees:
* @param id:
* @return: the total importance value
*/
public int getImportance(List<Employee> employees, int id) {
// Write your code here.
if (employees == null || employees.isEmpty()) {
return 0;
}
return dfs(employees.get(id - 1), employees);
}
private int dfs(Employee employee, List<Employee> employees) {
int res = employee.importance;
for (int subordinate : employee.subordinates) {
// 累加各個下屬子樹的所有importance總和
res += dfs(employees.get(subordinate - 1), employees);
}
return res;
}
}
class Employee {
int id, importance;
List<Integer> subordinates;
}
時間複雜度,空間,分別是樹節點個數和樹高。