如何在 Java 中实现 returns 公司内部员工层次结构的功能

How to implement a function in Java that returns the hierarchy of an employee inside a company

我得到一个 Employee-class 和一个包含公司所有员工的列表。现在,我想实现一个函数 findHierarchy(Employee employee),其中 return 是相应员工的层次结构。

即想象以下层次结构树:

boss
    department_leader_1
        group_leader_a
            employee_group_a_1
            employee_group_a_2
        group_leader_b
            employee_group_b_1
    department_leader_2

findHierarchy(boss) 应该 return 3,而 findHierarchy(employee_group_a_1) 应该 return 0findHierarchy(group_leader_a) 应该 return 1.

我已经实现了一个函数 findSubordinates(Employee employee, List<employee> allEmployees),其中 return 是一个列表,其中包含给定员工的所有直属下属。例如 findSubordinates(group_leader_a, allEmployees) 会 return [ employee_group_a_1, employee_group_a_2 ]findSubordinates(department_leader_1, allEmployees) 会 return [group_leader_a, group_leader_b].

这是我对如何实现的猜测 findHierarchy():

public static int findHierarchy(Employee employee, List<Employee> allEmployees, int hierarchy) {

        List<Employee> subordinates = findSubordinates(employee, allEmployees);
        
        if (subordinates.size() > 0) {
            hierarchy += 1;
            for (Employee subordinate: subordinates) {
                hierarchy = findHierarchy(subordinate, allEmployees, hierarchy);
            }
        } 
        return hierarchy;
    }

这似乎并不太远。但是,我很难完全考虑这种递归。有没有人看出错误可能在哪里?

尝试替换

hierarchy += 1;
for (Employee subordinate: subordinates) {
     hierarchy = findHierarchy(subordinate, allEmployees, hierarchy);
}

int currentHierarchy = hierarchy;                 
for (Employee subordinate: subordinates) {
    hierarchy = Math.max(findHierarchy(subordinate, allEmployees, currentHierarchy + 1), hierarchy);
}
需要

Math.max 以防止用较短的 Employee 链覆盖先前的长链

你的问题出在这一行:

hierarchy = findHierarchy(subordinate, allEmployees, hierarchy);

如您所见,您首先将层次结构递增 1:

hierarchy += 1;

然后立即在 for 循环中重置它,而不是分配它:

hierarchy += findHierarchy(subordinate, allEmployees, hierarchy);