---
# System prepended metadata

title: '[690. Employee Importance](https://leetcode.com/problems/employee-importance/)'
tags: [leetcode]

---

---
tags: leetcode
---

# [690. Employee Importance](https://leetcode.com/problems/employee-importance/)
---
# My Solution
## Solution 1: DFS and unordered map
### The Key Idea for Solving This Coding Question
### C++ Code
```cpp=
/*
// Definition for Employee.
class Employee {
public:
    int id;
    int importance;
    vector<int> subordinates;
};
*/

class Solution {
public:
    int getImportance(vector<Employee *> &employees, int id) {
        unordered_map<int, Employee *> idToEmployee;
        for (int i = 0; i < employees.size(); ++i) {
            idToEmployee[employees[i]->id] = employees[i];
        }

        return dfs(employees, idToEmployee, id);
    }

private:
    int dfs(vector<Employee *> &employees, unordered_map<int, Employee *> &idToEmployee, int currId) {
        Employee *curr = idToEmployee[currId];
        if (curr->subordinates.empty()) {
            return curr->importance;
        }

        int total = curr->importance;
        for (auto &nextId : curr->subordinates) {
            total += dfs(employees, idToEmployee, nextId);
        }

        return total;
    }
};
```
### Time Complexity
$O(n)$
* $n$ is the number of employees.
### Space Complexity
$O(H)$
* $H$ is the height of the tree.
## Solution 2: DFS and linear search
### The Key Idea for Solving This Coding Question
### C++ Code
```cpp=
/*
// Definition for Employee.
class Employee {
public:
    int id;
    int importance;
    vector<int> subordinates;
};
*/

class Solution {
public:
    int getImportance(vector<Employee*> employees, int id) {
        Employee *curr = findEmployeeById(employees, id);
        if (curr == nullptr) {
            return 0;
        }

        return dfs(employees, curr);
    }

public:
    Employee *findEmployeeById(vector<Employee*> &employees, int id) {
        for (int i = 0; i < employees.size(); ++i) {
            if (employees[i]->id == id) {
                return employees[i];
            }
        }
        return nullptr;
    }

    int dfs(vector<Employee*> &employees, Employee *curr) {
        if (curr == nullptr) {
            return 0;
        }
        if (curr->subordinates.empty()) {
            return curr->importance;
        }

        int importance = curr->importance;
        for (int i = 0; i < curr->subordinates.size(); ++i) {
            Employee *next = findEmployeeById(employees, curr->subordinates[i]);
            if (next == nullptr) {
                continue;
            }

            importance += dfs(employees, next);
        }
        return importance;
    }
};
```
### Time Complexity
$O(n)$
* $n$ is the number of employees.
### Space Complexity
$O(H)$
* $H$ is the height of the tree.
## Solution 3: BFS
### The Key Idea for Solving This Coding Question
### C++ Code
```cpp=
/*
// Definition for Employee.
class Employee {
public:
    int id;
    int importance;
    vector<int> subordinates;
};
*/

class Solution {
public:
    int getImportance(vector<Employee*> employees, int id) {
        unordered_map<int, Employee*> idToEmployee;
        for (Employee *employee : employees) {
            idToEmployee[employee->id] = employee;
        }
        
        queue<int> q;
        int totalImportance = idToEmployee[id]->importance;
        
        q.push(id);
        while (!q.empty()) {
            int currId = q.front();
            Employee *currEmployee = idToEmployee[currId];
            q.pop();
            
            for (int &nextId : currEmployee->subordinates) {
                Employee *nextEmployee = idToEmployee[nextId];
                
                q.push(nextId);
                totalImportance += nextEmployee->importance;
            }
        }
        
        return totalImportance;
    }
};
```
### Time Complexity
$O(n)$
* $n$ is the number of employees.
### Space Complexity
$O(n)$
# Miscellane
<!--
# Test Cases
```
[[1,5,[2,3]],[2,3,[]],[3,3,[]]]
1
```
```
[[1,2,[5]],[5,-3,[]]]
5
```
```
[[1,5,[2,3]],[2,3,[4,6]],[3,3,[8,10,12]],[4,5,[]],[6,7,[]],[8,9,[]],[10,11,[]],[12,13,[]]]
1
```
```
[[1,5,[2,3]],[2,3,[4,6]],[3,3,[8,10,12]],[4,5,[]],[6,7,[]],[8,9,[]],[10,11,[]],[12,13,[]]]
3
```
-->