Я предполагаю, что параллельно вы просто означаете, что все узлы уровня глубины должны вычисляться до более низкого уровня глубины, т. Е. Вам не нужны несколько потоков.
Стандартный способ выполнения операции над узлами двоичного дерева состоит в использовании рекурсивной функции. Однако в этом случае вам нужно будет следить за уровнем глубины, чтобы узнать, разрешено ли вам выполнять задачу.
Вы можете использовать список задач, которые необходимо выполнить в правильном порядке: вы проходите через свое дерево, добавляя узлы в список задач. Этот список сортируется в соответствии с глубиной узлов. В конце вы применяете свою операцию для каждого узла отсортированного списка в данном порядке.
def fill_list(node, depth):
list.add_in_sorted_list(node, depth)
if(node.has_left_child())
fill_list(node.left_child, depth+1)
if(node.has_right_child())
fill_list(node.right_child, depth+1)
Затем примените square() ко всем узлам списка.
(это псевдо-код. Сложность O (N^2), но вы можете получить O (N журнал N), если вы используете более удобную структуру для обработки отсортированные задач, таких как другой бинарное дерево)
Не то, чтобы это не сработало, если вам нужна информация из дочерних узлов для выполнения операции над текущим узлом.
EDIT: сложность на самом деле O (n): при добавлении текущего узла перед вызовом функции на дочернем узле вы убедитесь, что текущая глубина ниже всех будущих. Поэтому вы всегда можете добавить узел в начале списка, который стоит O (1).
Это не так, если бы вы вызывали функцию на дочерних узлах, прежде чем добавлять текущий список в список.
Да, это возможно.Но я уверен, что это не то, что вы ищете. Пожалуйста, перефразируйте вопрос, чтобы выделить то, что вы хотите знать. – Sorin
Я хочу применить эту параллельно выполняющуюся функцию к древовидной структуре – pheno
и? Что вас останавливает? – Sorin