Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 查找最大嵌套列表计数_Java_Oop_Collections_Java 8 - Fatal编程技术网

Java 查找最大嵌套列表计数

Java 查找最大嵌套列表计数,java,oop,collections,java-8,Java,Oop,Collections,Java 8,我有一个叫做Person的类对象 public class Person { .... private List<Person> people; .... public List<Person> getPeople() { return people; } public void setPeople(List<Person> people) { this.people =

我有一个叫做Person的类对象

public class Person {
    ....
    private List<Person> people;
    ....
    public List<Person> getPeople() {
          return people;
    }

    public void setPeople(List<Person> people) {
          this.people = people;
    }
公共类人物{
....
私人名单;
....
公共列表getPeople(){
还人,;
}
公众人物(列出人物){
这个。人=人;
}


每个人的内部都有所有员工的列表,下面都有人员的列表。如何查找最大深度?例如,在该图像中,最大深度为2。第二高的为1。非常感谢您的帮助。

尝试使用深度优先搜索。它专门先查找最深的节点

1  procedure DFS(G,v):
2      label v as discovered
3      for all edges from v to w in G.adjacentEdges(v) do
4          if vertex w is not labeled as discovered then
5              recursively call DFS(G,w)
有关更多信息,请查看。

简单地说:

public static int maxDepth(Person p) {
    int maxChildrenDepth = 0;
    for (Person c: p.getPeople()) {
        maxChildrenDepth = Math.max(maxChildrenDepth, maxDepth(c));
    }
    return 1 + maxChildrenDepth;
}

我认为其中一种方法(这种方法可能不是最有效也不是最好的)是创建一个while循环,通过递归调用方法检查if
getPeople(
)返回
null
。如果不返回,则可以增加计数器并再次递归调用该检查方法。当
getPeople()时,此方法应中断
返回
null
并应返回分配给计数器的值。

实际上,原始答案是1+,因为我每次都要减去-1。以下是正确答案

public int maxDepth() {
        int maxChildrenDepth = 0;

        if(people.size()==0)
            return 0;

        for (Person prs: people) {
            maxChildrenDepth = Math.max(maxChildrenDepth, prs.maxDepth());
        }

        return 1 + maxChildrenDepth;
    }

你确定你的图表中没有循环吗?这意味着person.people或它的一个孩子没有引用person?是的。我非常确定它返回的是4而不是3。我从maxDepth得到的值减去了1。你能告诉我更正吗?