我正在尝试创建一种方法,该方法将返回任何节点具有的最大数量的子代(子代节点)。但是,我的代码错误地读取了更深的层次。
import java.util.ArrayList;
import java.util.List;
public class Person {
private String name;
private List<Person> children = new ArrayList<Person>();
public Person(String name) {
this.name = name;
}
public void addChild(Person child) {
children.add(child);
}
public int returnMaxChildren() {
int count = children.size();
for (Person child : children)
if (child.children.size() > count)
count = child.children.size();
return count;
}
答案 0 :(得分:0)
首先,您需要一种计算所有孩子的方法:
public int countChildren() {
int retVal = children.size();
for (Person child : children) {
retVal += child.countChildren();
}
return retVal;
}
这样,您可以在对象中查找节点数最多的孩子:
public int returnMaxChildren() {
int retVal = 0;
for (Person child : children) {
if (child.countChildren() > retVal) {
retVal = child.countChildren();
}
}
return retVal;
}
答案 1 :(得分:0)
您的代码获取当前节点的子代数量,然后将其与孙子代(当前子代的数量)进行比较。就是这样。
如果要获取任何后代节点的最大子节点数量,则可以通过递归调用returnMaxChildren
来让子节点以相同的方式计算它们的 max 。
public int returnMaxChildren() {
int count = children.size();
for (Person child : children){
int childMax = child.returnMaxChildren();
if (childMax > count){
count = childMax;
}
}
return count;
}