我有以下课程:
class A {
List<A> as;
}
我需要找到最大深度。例如,我可以这样:
A firstA = new A();
A secondA = new A();
A thirdA = new A();
firstA.addA(secondA);
firstA.addA(thirdA);
secondA.addA(new A());
secondA.addA(new A());
我需要返回3。
我尝试做递归方法,
答案 0 :(得分:2)
使用Java 8流:
class A {
List<A> as;
public int getDepth() {
return 1 + as.stream().mapToInt(A::getDepth).max().orElse(0);
}
}
如果您不熟悉溪流,可以将其解释为“将所有孩子的最大深度加1”或“如果没有孩子则加0”。
如果您无法更改A,您仍然可以通过将A传递给方法来使用它:
public class MyClass {
public static int getDepth(A a) {
return 1 + a.as.stream().mapToInt(MyClass::getDepth).max().orElse(0);
}
}
答案 1 :(得分:-1)
递归深度计算:
public static int computeDepth(A a)
{
int maxDepth = 0;
for(A innerA : a.getAs())
{
int depth = computeDepth(innerA);
if(depth > maxDepth)
maxDepth = depth;
}
return maxDepth + 1;
}