Java 查找最大嵌套列表计数
我有一个叫做Person的类对象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 =
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。你能告诉我更正吗?