查找树中最大子节点数

时间:2019-03-29 22:47:56

标签: java tree

我正在尝试创建一种方法,该方法将返回任何节点具有的最大数量的子代(子代节点)。但是,我的代码错误地读取了更深的层次。

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

2 个答案:

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