Существует простой способ, если вы хотите сохранить свое дерево в массиве. Вместо того чтобы каждый узел имел указатели на свои левые и правые дочерние элементы, дочерние элементы узла n равны 2n + 1 и 2n + 2 в массиве. (И родительский узел n равен (n-1) / 2, если n! = 0.)
Node tree[] = { 0, //root
1, // root's left child
2, // root's right child
3, // 1's left child
4, // 1's right child
5, // 2's left child
6, // 2's right child
...,
};
Простая итерация по массиву линейно эквивалентна BFS, но с требованиями к пространству O (1).
Это можно легко распространить на n-арные деревья. например, в троичном дереве левый потомок - 3n + 1, центр - 3n + 2, правый - 3n + 3, а родительский - (n-1) / 3, если n! = 0.