按照题意可知是一颗树, 因为直系领导一个就是父节点,但是子节点可以有很多个,也就是可以有很多直系下属。
深度搜索
"""
# Definition for Employee.
class Employee:
def __init__(self, id: int, importance: int, subordinates: List[int]):
self.id = id
self.importance = importance
self.subordinates = subordinates
"""
class Solution:
def getImportance(self, employees: List['Employee'], idx: int) -> int:
mp = {employee.id: employee for employee in employees}
def dfs(idx: int) -> int:
employee = mp[idx]
total = employee.importance + sum(dfs(subIdx) for subIdx in employee.subordinates)
return total
return dfs(idx)
当sum(dfs(subIdx) for subIdx in employee.subordinates)
中的subIdx为空的时候,返回的是0,所以不用特殊判断参数是否为空。
广度优先遍历
"""
# Definition for Employee.
class Employee:
def __init__(self, id: int, importance: int, subordinates: List[int]):
self.id = id
self.importance = importance
self.subordinates = subordinates
"""
class Solution:
def getImportance(self, employees: List['Employee'], idx: int) -> int:
mp = {employee.id: employee for employee in employees}
q = []
ans = 0
q.append(mp[idx])
while q:
for subidx in q[0].subordinates:
q.append(mp[subidx])
ans = ans + q.pop(0).importance
return ans