Approach
Depth-first search
For Analyze Organization Hierarchy, the implementation follows one branch at a time, making it suitable for components, trees, backtracking, or dependency exploration.
- Define the state carried into one recursive or stack frame.
- Mark or choose the current state before exploring children.
- Combine child results or undo the choice when the branch finishes.
Code notes
- 68 lines of SQL from the credited upstream file 3482.sql.
- The implementation keeps its working state in language-native values and containers.
- No explicit loop blocks detected.
Complexity
Count unique states for graph traversal; for backtracking, count the branching factor and maximum depth.
Check the problem constraints before deciding whether this complexity will pass.
Use this to learn the idea, then write your own version.
1WITH RECURSIVE2 EmployeeHierarchy AS (3 4 SELECT5 employee_id,6 employee_name,7 manager_id,8 salary,9 1 AS level10 FROM Employees11 WHERE manager_id IS NULL12 UNION ALL13 14 SELECT15 Employees.employee_id,16 Employees.employee_name,17 Employees.manager_id,18 Employees.salary,19 EmployeeHierarchy.level + 120 FROM Employees21 INNER JOIN EmployeeHierarchy22 ON (Employees.manager_id = EmployeeHierarchy.employee_id)23 ),24 25 TeamSizeAndBudget AS (26 WITH RECURSIVE27 28 Subordinates AS (29 30 SELECT31 manager_id,32 employee_id,33 salary34 FROM Employees35 WHERE manager_id IS NOT NULL36 UNION ALL37 38 SELECT39 Subordinates.manager_id,40 Employees.employee_id,41 Employees.salary42 FROM Employees43 INNER JOIN Subordinates44 ON (Employees.manager_id = Subordinates.employee_id)45 )46 SELECT47 Employees.employee_id,48 COUNT(DISTINCT Subordinates.employee_id) AS team_size,49 IFNULL(SUM(Subordinates.salary), 0) + Employees.salary AS total_budget50 FROM Employees51 LEFT JOIN Subordinates52 ON (Employees.employee_id = Subordinates.manager_id)53 GROUP BY Employees.employee_id, Employees.salary54 )55SELECT56 EmployeeHierarchy.employee_id,57 EmployeeHierarchy.employee_name,58 EmployeeHierarchy.level,59 IFNULL(TeamSizeAndBudget.team_size, 0) AS team_size,60 IFNULL(TeamSizeAndBudget.total_budget, EmployeeHierarchy.salary) AS budget61FROM EmployeeHierarchy62LEFT JOIN TeamSizeAndBudget63 USING (employee_id)64ORDER BY65 EmployeeHierarchy.level,66 TeamSizeAndBudget.total_budget DESC,67 EmployeeHierarchy.employee_name;68