既然你没有给任何树/节点类,我制作了一个带有测试:
:
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]]
但是请注意,[A,B,E,F]
是不是一个有效的路径,如F
不是E
一个孩子。所以我认为这是一个错误。
提示:想象一种从叶子回溯到父母的方式,然后转到另一叶子等等。 –
为什么'[A,B,E,F]'? F不是E的后代,反之亦然。如果你没有重复所有可能的根到叶路径,你能给出更多关于你想要做什么的细节吗? – Kevin
谢谢大家,我能够自己做到。 – Jozef