Как нерекурсивно обойти дерево без стека?
нерекурсивно/без стека (что одно и тоже) никак, если в элементах нету ссылок на ихних предков
помести туда корень и далее
пока очередь не пуста
- берем ее элемент,
посещаем
помещаем в очередь элементы-потомки связанные с данным элементом.
переход к началу "пока".
*существуют, если общее время решения, не О(N)
я хз, что он там подразумевает, но если без дополнительной памяти вообще - то видимо невозможно. а если разрешено использовать доп.память - то пожалуйста, либо стек, либо очередь. в случае очереди получаем в качестве профита отсутствие рекурсии. ну и стек обычно имеет ограниченную глубину, а очередь делается обычно на куче и не ограничена фиксированным размером, а только доступной памятью.
возможно! я же сказал - если в деревве есть ссылки вверх, а не только влево, вправо
этот метод сильно не оптимален, тк нужно каждый раз когда поднимаешься в родительскую вершину проходить весь ее список дочерних вершин, чтобы определить позицию в этом списке той вершины из которой ты пришел.
вообще дерево обычно не подразумевает наличие ссылок вверх. а твои ссылки вверх как раз и будут дополнительной памятью, пропорциональной количеству элементов дерева.
нерекурсивно/без стека (что одно и тоже) никак, если в элементах нету ссылок на ихних предковУ неё есть два известных мне существенно различных решения, О(1) по памяти, ссылок вверх нет. Одно есть в Кнуте, другое придумал , там всё как-то дико красиво автоматически получается, вот его достаточно потрассировать на бумажке чтобы восхититься!
возможно! я же сказал - если в деревве есть ссылки вверх, а не только влево, вправоСобственно, ссылки вверх есть развернутое в памяти все многообразие возможных стеков.
я правильно понимаю, что там везде дерево само портится?
Нет, оно в конце восстанавливается.
В принципе, если есть дополнительная информация вида "адреса TNode выровнены хотя бы по четным", то можно извратиться, только в определении TNode надо left и right объявить как void *.
Его надо запирать даже на чтение.
---
"У нас ведь беда не в том, чтобы объединиться, а в том, кто главный."
не надо никого запирать, это же теория алгоритмов, а не программирование
Аппаратный стек — это еще не все // КО.
Оставить комментарий
agent007new
Что-то не гуглится решение. Нашел такой вот код:Но он неправильно работает. На дереве из трех узлов 2 корень, 1 и 3 листья выдает вот что: 211123332.
А в чем в нем косяк что-то не могу понять, т.к. не знаю даже идеи, как такой обход сделать