Итерации по n-глубине в древовидной структуре - PullRequest
0 голосов
/ 24 декабря 2018

Как программно получить итератор n-глубины над древовидной структурой?В корне у меня есть

List<Node>

каждый узел имеет

Map<Integer,List<Node>> 

, которые имеют глубину n + 1.

Я установил для 1 глубины:

// DEPTH 1
nodeData.forEach(baseNode -> {
    baseNode.getChildNodes().entrySet().forEach(baseNodeChildeNodes -> {
            genCombOnePass(baseNodeChildeNodes, 2);
        });
});

и

// DEPTH 2
nodeData.forEach(baseNode -> {
    baseNode.getChildNodes().entrySet().forEach(baseNodeChildeNodes -> {
        baseNodeChildeNodes.getValue().forEach(childNodeEs -> {
            childNodeEs.getChildNodes().entrySet().forEach(childNode -> {
                genCombOnePass(childNode, 3);
            });
        });
    });
});

но мне нужно повторить пример.1-9 глубина.

1 Ответ

0 голосов
/ 24 декабря 2018

Вам нужна какая-то рекурсивная функция для достижения того, что вы хотите:

static void depthTraversal(Node root, int depth, int maxDepth) {
    if (depth == maxDepth) { // if you reached max level - exit
        return;
    }
    if (root == null || root.getChildNodes() == null) { // if you reached null child - exit
        return;
    }
    root.getChildNodes().forEach((key, value) -> value.forEach(node -> {
        // do what you need with your nodes
        depthTraversal(node, depth + 1, maxDepth); // recursively go to next level
    }));
}
...