web-dev-qa-db-ja.com

ツリーで次の出現を見つける

深さと幅が変化するツリーがあります。そのツリー内のノードの次の出現を見つけるための最良のアルゴリズムは何ですか。

次へ=ツリーの右側を検索します(幅優先探索のように)

ツリーの次の出現の選択基準は、さまざまな状況で変更可能です。

たとえば、ある場所で、現在のノードと等しい値を含むノードの次のオカレンスを見つけたいと思います。

別の方法では、現在の値よりも小さい次の値を選択したいと思います。

次のオカレンスが見つかると、プログラムは終了して値またはノードを返すことができます。

          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)を取得したいと思います。

2
Boopathi Rajaa

深さ優先探索を変更する必要があります。変更点は、検索のどこにあるかを把握し、そこから続行するためのコードが必要になることです。

各ノードにparentchildrenがあると仮定しましょう。次に、次のようなことを行います。

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
2
btilly