あなたが任意のツリー/ノードクラスを与えていないので、私がテストするために1を作った:
class Node:
def __init__(self, data, children=None):
if children is None:
children = []
self.data = data
self.children = children
def __str__(self):
return str(self.data)
__repr__ = __str__
あなたの画像から抽出されたツリー:
tree = Node("A", [
Node("B", [
Node("E"),
Node("F"),
]),
Node("C"),
Node("D", [
Node("G", [
Node("H"),
Node("I"),
Node("J"),
Node("K"),
])
])
])
欲しいのは、可能な限りすべてのルートからリーフパスを取得できるアルゴリズムです。
def get_all_paths(node, path=None):
paths = []
if path is None:
path = []
path.append(node)
if node.children:
for child in node.children:
paths.extend(get_all_paths(child, path[:]))
else:
paths.append(path)
return paths
テスト、それはあなたが望んだの出力が得られます
paths = get_all_paths(tree)
print(paths)
# Prints:
# [[A, B, E], [A, B, F], [A, C], [A, D, G, H], [A, D, G, I], [A, D, G, J], [A, D, G, K]]
しかしF
がE
の子ではないよう[A,B,E,F]
は、有効なパスではないことに注意してください。だから私はこれが間違いだと思う。
ヒント:葉から親に戻って別の葉に移動するなどの方法を考えてください。 –
なぜ[[A、B、E、F] '、なぜですか? FはEの子孫ではなく、逆もまた同様である。可能なすべてのルートからリーフまでの経路を繰り返しているわけではない場合、何をしようとしているのかについて詳細を教えてください。 – Kevin
ありがとう、私はそれを自分で行うことができました。 – Jozef