查找java中报告结构的级别数

时间:2016-10-20 13:37:58

标签: java list hashmap hierarchy

我想计算经理和员工之间的等级数。

也就是说,如果我给出一个empid,我想知道层次结构中有多少经理。 Here是我们可以找到直接报告数量的示例

但我想找到emp-mgr等级。

例如。 emp,mgr

{ "A", "C" },
{ "B", "C" },
{ "C", "D" },
{ "D", "E" },
{ "E", "F" },
{ "F", "F" } 

在这个例子中,C是A的经理, C也是B的经理,F是经理 C等等。

F -> A = 3(mgrs between)

你可以帮我用java解决这个问题吗

1 个答案:

答案 0 :(得分:0)

只要你在回答一个澄清问题之外没有做出任何努力,我就不应该给你这个。我的想法是从所有经理(C,D,E和F)开始,并计算我可以从他们那里爬出管理树的高度。

public static <T> int treeHeight(Map<T, T> management) {
    // find first level managers
    Collection<T> managers = management.entrySet()
            .stream()
            .filter(entry -> ! entry.getKey().equals(entry.getValue()))
            .map(Map.Entry::getValue)
            .collect(Collectors.toCollection(HashSet::new));
    int level = 0;
    while (! managers.isEmpty()) {
        level++;
        // find next level managers
        managers = managers.stream()
                .filter(emp -> ! emp.equals(management.get(emp)))
                .map(emp -> management.get(emp))
                .collect(Collectors.toCollection(HashSet::new));
    }
    return level;
}

此方法查找从最低员工(管理树中的叶子)到自我管理经理(根)的步骤数,即示例中的4(对于空地图或仅包含该地图的地图)自我管理经理将返回0)。减去一个只得到两者之间的经理人数:

    Map<String, String> management = new HashMap<>();
    management.put("A", "C");
    management.put("B", "C");
    management.put("C", "D");
    management.put("D", "E");
    management.put("E", "F");
    management.put("F", "F");
    System.out.println(treeHeight(management) - 1);

这打印3。