Нетрудно написать обход в ширину и посетить всех детей до определенного уровня. Вот какой-то псевдокод. Предположим, у вас есть новый класс:
public class NodeWithLevel {
Node node;
int level;
}
Этот класс является только оболочкой, используемой для этого алгоритма.
Тогда метод "получить все узлы до уровня N" будет:
Queue<NodeWithLevel> queue;
queue.enqueue(<0, tree.root>);
currentLevel = 0;
while(currentLevel < N) {
NodeWithLevel current = queue.dequeue();
currentLevel = current.level;
// do whatever with current
for(Node child: current.node.children) {
queue.enqueue(<current.level + 1, child>);
}
}