【发布时间】:2018-05-24 06:08:25
【问题描述】:
我有这个 Person 对象。每个人都有一个人对象列表等,并且可以是无限的
public class Person {
private List<Person> people = new ArrayList<>();
public Person() {
}
...
public List<Person> getPeople() {
return people;
}
public void setPeople(List<Person> people) {
this.people = people;
}
public int maxDepth() {
int maxChildrenDepth = 0;
for (Person prs: people) {
maxChildrenDepth = Math.max(maxChildrenDepth, prs.maxDepth());
}
return 1 + maxChildrenDepth;
}
public static Set<Person> getPersonLevel(Person person, int depth) {
Set<Person> ppl= new HashSet<>();
if (depth > 0) {
person.getPeople().forEach(prs -> ppl.addAll(getPersonLevel(prs, depth - 1)));
}
return ppl;
}
问题 1:方法 --> maxDepth 不起作用。在该图像中,正确的最大深度为 3(请参见圆圈),但该方法给我的值为 4。
问题 2:根据 maxDepth,我想获取列表中的所有人。例如,如果我通过 maxdept 3 的人对象,如果我通过深度为 2,我应该得到所有 person 1 和 person 2 和 NOT person 3 在该图表的列表中。我通过编写该方法尝试了努力——> public static Set getPersonLevel(Person person, int depth) 但这不起作用,因为它一直返回空集。
感谢任何帮助
【问题讨论】:
-
在 maxDepth 你返回 n+1 问题 2 可以使用递归来完成。
-
@Nathan 你是什么意思?
-
你做
return 1 + maxChildrenDepth;...如果这个太多了,尽量不要加一个。 -
@Nathan 我确实删除了,它返回 0 而不是 2 并且不添加。关于问题2,我试过了,但是不行
-
天哪,对不起,忽略我说的话。在移动应用上且滚动不足。
标签: java recursion collections java-8 depth