Java实现递归

现有部门:
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]
    }
}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值