Найти максимальное количество дочерних узлов в дереве - PullRequest
0 голосов
/ 30 марта 2019

Я пытаюсь создать метод, который бы возвращал наибольшее количество дочерних узлов (дочерних узлов), которое есть у любого узла. Однако мой код неправильно читает более глубокие уровни.

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 голосов
/ 30 марта 2019

Ваш код принимает количество дочерних элементов текущего узла, а затем сравнивает его с количеством внуков (дочерних элементов текущих дочерних элементов).Но это так.

Если вы хотите получить максимальное количество дочерних элементов любого потомка, вы можете разрешить детям вычислять их max таким же образом, рекурсивно вызывая returnMaxChildren для них.

public int returnMaxChildren() {
    int count = children.size();
    for (Person child : children){
        int childMax = child.returnMaxChildren();
        if (childMax > count){
            count = childMax;
        }
    }
    return count;
}
0 голосов
/ 30 марта 2019

Сначала вам нужен метод для подсчета всех дочерних элементов:

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...