Дано неориентированное дерево с n узлами, помеченными от 0 до n-1, с корнем в узле 0, и ребрами массива, где ребра = [ai, bi ] указывает ребро между узлами ai и bi, вам необходимо вернуть количество «хороших» узлов. Узел считается «хорошим», если все поддеревья, коренящиеся в его дочерних узлах, имеют одинаковый размер. Поддерево состоит из узла и всех его потомков.
В настоящее время я использую следующий метод для расчета размера поддеревьев, но сталкиваюсь с ошибкой StackOverflowError:
Код: Выделить всё
public int countSize(ArrayList nodes, Node node) {
int k = 0;
ArrayList children = node.children;
if (children.size() == 0) {
return 0;
} else for (int j = 0; j < children.size(); j++) {
k++;
int b = children.get(j);
Node m = findNodeByName(nodes, b);
int y = countSize(nodes, m);
k = k + y;
}
return k;
}
Можете ли вы помочь понять, в чем проблема, и предложить способы ее решения?
Подробнее здесь: https://stackoverflow.com/questions/790 ... unction-to