深さと幅が変化するツリーがあります。そのツリー内のノードの次の出現を見つけるための最良のアルゴリズムは何ですか。
次へ=ツリーの右側を検索します(幅優先探索のように)
ツリーの次の出現の選択基準は、さまざまな状況で変更可能です。
たとえば、ある場所で、現在のノードと等しい値を含むノードの次のオカレンスを見つけたいと思います。
別の方法では、現在の値よりも小さい次の値を選択したいと思います。
次のオカレンスが見つかると、プログラムは終了して値またはノードを返すことができます。
5
6 9
10 7 0 5 6 8
5 6 9 5
ノードへのポインター(深さ= 4、値= 5、親= 10)があるとします...検索を実行するときに、ノード(深さ= 4、値= 5、親= 0)へのポインターを取得します。 )。
これがないと言うと、node(depth = 1、value = 5、rootNode)を取得したいと思います。
深さ優先探索を変更する必要があります。変更点は、検索のどこにあるかを把握し、そこから続行するためのコードが必要になることです。
各ノードにparent
とchildren
があると仮定しましょう。次に、次のようなことを行います。
def find_next_in_tree(node, relation):
answer = do_depth_first_search(node, relation)
if answer:
return answer
while node.parent:
old_node = node
node = node.parent
children = node.children
# Find where node is in children.
i = 0
while i < children.length:
if old_node == children[i]:
break
i += 1
# Search remaining children
i += 1
while i < children.length:
answer = do_depth_first_search(children[i], relation)
if answer:
return answer
i += 1
return None