我想计算经理和员工之间的等级数。
也就是说,如果我给出一个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解决这个问题吗
答案 0 :(得分:0)
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。