对象包含对象列表。找到最大深度

时间:2016-09-08 19:18:21

标签: java

我有以下课程:

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。

我尝试做递归方法,

2 个答案:

答案 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;
}