У меня есть первый узел дерева. Что-то вроде этого:Есть ли алгоритм обхода дерева с фиксированной памятью?
class TreeNode {
int uniqueValue;
List<TreeNode> children;
}
Я хочу найти наиболее эффективный способ памяти для печати всех узлов дерева. Дерево может быть большим или ОЧЕНЬ БОЛЬШИМ. Он может быть глубоким или широким. Я знаю алгоритмы с рекурсией и со стеклом. Я хочу найти алгоритм, который использует память фиксированного объема независимо от размера графика.
Дерево не является бинарным!
Каковы ограничения на временную сложность? Кроме того, можно добавить дополнительный указатель в класс TreeNode? –
Имеет ли значение вопрос? Можете ли вы добавить логический флаг на каждый узел, чтобы вы могли пометить его как напечатанный? Вам небезразлично, требуется ли время O (n^2)? Действительно ли дерево настолько глубокое, что обычная рекурсивная перемотка по глубине приведет к удалению стека? –
Если вы можете пересечь дерево на самый глубокий уровень, распечатайте узел и удалите его (!), А затем снова начните с вершины, у вас есть ужасно неэффективный алгоритм, но он не использует лишнюю память. Это интеллектуальное упражнение, или вы ищете полезный ответ? Если дерево вписывается в память, оно должно быть доступно для использования (стек не глубже, чем самый глубокий уровень дерева). – Floris