【Lintcode】1082. Employee Importance

题目地址:

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;
}

时间复杂度 O ( n ) O(n) O(n),空间 O ( h ) O(h) O(h),分别是树节点个数和树高。

你可能感兴趣的:(#,DFS,BFS与图论,leetcode,算法,数据结构)