既然你沒有給任何樹/節點類,我製作了一個帶有測試:
:
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