Nレベルのツリーがあります。たとえば、ここには4つのレベルがあります。
各ノードには2つの子があります(最後のノードを除く)。ただし、各行の最初と最後のノードを除く全員に2つの親があります。リストのリストへのすべてのパスを取得するスケーラブルな方法を理解しようとしているので、この例では、文字のリストのリストを作成します。
A,B,D,G
A,B,D,H
A,B,E,H
等.
レベルの数に関係なく、これのためのアルゴリズムを見つける正しい方向に私を導くのを手伝ってくれる人はいますか?
ノードが2つの親を持つことができるという事実は、標準の 深さ優先検索 の使用を妨げるべきではありません。あなたがそれを説明するように、2人の親を持つ子供はまだ独立して2つの「解決策」の一部です。各ノードを離れる最大2つのエッジがあるという事実は、物事をさらに簡素化します。
search(node):
if node is null: // maybe a non-terminal parent's left or right was null
return // that or someone gave you a null graph
add node to "discovered" list
if node is terminal:
print the list //[A,B,D,G], [A,B,D,H], etc
remove node from the list
return // done at this level
search(node.left)
search(node.right)
remove node from the list // all done at this level
左に行く前に右に行くと、発見の順序を変更できます。