これは、深さレベルのすべてのノードを低い深度レベルより前に計算する必要があるということです。つまり、複数のスレッドを気にしないということです。
バイナリツリーのノードで操作を実行する標準的な方法は、再帰関数を使用することです。ただし、この場合は、タスクを実行することが許可されているかどうかを判断するために深度レベルを把握する必要があります。
タスクのリストを正しい順序で実行することができます。タスクのリストにノードを追加してツリーを通過します。このリストは、ノードの深さに応じてソートされます。最後に、並べ替えられたリストの各ノードに対して、指定した順序で操作を適用します。
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)の擬似コードですが、あなたがそのような別のバイナリツリーとしてソートされたタスクを処理するために、より良い構造を使用する場合は(N Nをログ)Oを得ることができます)
現在のノードで操作を実行するために子ノードからの情報が必要な場合、これは機能しません。
EDIT:複雑さは実際にはO(n)です:子ノードで関数を呼び出す前に現在のノードを追加すると、現在の深度がすべての将来のものよりも低いことが保証されます。したがって、リストの先頭にノードを追加することはできますが、O(1)のコストがかかります。
現在のノードをリストに追加する前に子ノードで関数を呼び出していた場合、これは当てはまりません。
はい、可能です。しかし、私はそれがあなたが探しているものではないと確信しています。あなたが知りたいことを強調する質問を言い換えてください。 – Sorin
この並列実行機能をツリー構造 – pheno
に適用したいのですが?あなたを止めているのは何ですか? – Sorin