现有部门:
1部门下面挂载了直属部门:2、3、4
2部门下面挂载了直属部门:5、6
3下面挂7
4下面没有任何挂载
5下面挂8
6下面没有任何挂载
7下面没有任何挂载
8下面没有任何挂载
现在已有一个Java函数:
输入[1],能返回[2,3,4,1]
输入[2],能返回[5,6,2]
输入[3],能返回[7,3]
输入[4],能返回[4]
输入[5],能返回[8,5]
[]表示的是数据类型整型list
请问现在怎么利用这个函数,实现递归的功能?即传入[1],返回[2,3,4,5,6,7,8,1]
import java.util.*;
public class DepartmentHierarchy {
// 部门映射关系:key为部门号,value为其直接挂载的部门号列表
private static Map<Integer, List<Integer>> departmentMap = new HashMap<>();
// 初始化部门映射关系(假设这里固定了部门结构)
static {
departmentMap.put(1, Arrays.asList(2, 3, 4));
departmentMap.put(2, Arrays.asList(5, 6));
departmentMap.put(3, Collections.singletonList(7));
departmentMap.put(4, Collections.emptyList()); // 4没有任何挂载
departmentMap.put(5, Collections.singletonList(8));
departmentMap.put(6, Collections.emptyList()); // 6没有任何挂载
departmentMap.put(7, Collections.emptyList()); // 7没有任何挂载
departmentMap.put(8, Collections.emptyList()); // 8没有任何挂载
}
// 辅助函数:递归获取部门及其所有直接或间接挂载的部门
private static void getAllDepartmentsRecursive(int department, Set<Integer> visited, List<Integer> result) {
if (!visited.contains(department)) {
visited.add(department);
List<Integer> directSubdepartments = departmentMap.get(department);
if (directSubdepartments != null) {
for (int subdepartment : directSubdepartments) {
getAllDepartmentsRecursive(subdepartment, visited, result);
}
}
result.add(department); // 添加当前部门到结果中
}
}
// 递归获取部门及其所有直接或间接挂载的部门
public static List<Integer> getAllDepartments(int department) {
Set<Integer> visited = new HashSet<>();
List<Integer> result = new ArrayList<>();
getAllDepartmentsRecursive(department, visited, result);
return result;
}
public static void main(String[] args) {
// 测试示例
System.out.println(getAllDepartments(1)); // 应该输出 [2, 3, 4, 5, 6, 7, 8, 1]
System.out.println(getAllDepartments(2)); // 应该输出 [5, 8, 6, 2]
System.out.println(getAllDepartments(3)); // 应该输出 [7, 3]
System.out.println(getAllDepartments(4)); // 应该输出 [4]
System.out.println(getAllDepartments(5)); // 应该输出 [8, 5]
System.out.println(getAllDepartments(6)); // 应该输出 [6]
System.out.println(getAllDepartments(7)); // 应该输出 [7]
}
}