Можно ли выполнить итерационного * предзаказа * обход на бинарное дерево без использования узла-стеки или «посетил» флаги?Stackless предзаказ обход в бинарном дереве
Насколько мне известно, такие подходы обычно требуют, чтобы узлы в дереве имели указатели на своих родителей. Теперь, конечно, я знаю, как выполнить предварительный обход с использованием указателей родительских указателей и посещенных флагов, тем самым устраняя любое требование стеков узлов для итеративного обхода.
Но, мне было интересно, нужны ли флаги для посещения. Они занимали бы много памяти, если в дереве было много узлов. Кроме того, наличие у них не имеет большого смысла, если параллельно происходит параллельное проецирование дерева двоичного дерева с предварительным порядком одновременно.
Если это возможно, некоторый псевдокод или лучший пример кода на C++ будет действительно полезен.
EDIT: Я специально не хотят использовать рекурсии для предварительного заказа обхода. Контекст моего вопроса заключается в том, что у меня есть octree (который похож на двоичное дерево), который я создал на графическом процессоре. Я хочу запустить много потоков, каждый из которых выполняет обход дерева независимо и параллельно.
Во-первых, CUDA не поддерживает рекурсию. Seoncdly, концепция посещенных флагов применяется только для одного обхода. Так как много обходов происходит одновременно, поле посещенных полей в структуре данных узла бесполезно. Они будут иметь смысл только на процессоре, где все независимые обходы дерева/могут быть сериализованы. Чтобы быть более конкретным, после каждого обхода дерева мы можем установить флаги, которые были посещены, перед выполнением другого обхода дерева предварительного заказа.
Учитывается ли рекурсия как стек? –
Спасибо, что указали это. См. Править. Я также не хочу использовать рекурсию. – smilingbuddha
Почему вы не можете использовать внешнюю структуру данных для посещенных флагов (т. Е. Hashtable, добавить узел после посещения)? – BrokenGlass