可以遞歸遍歷假設predecessor_map
邊緣是dict
映射節點到父節點,並且None
是根:
predecessor_map={0: None, 1: None, 2: 1, 3: 1, 4: 0, 5: 1}
定義橫穿樹反向遞歸函數:
def path(node, predecessors):
return [None] if node is None else [node] + path(predecessors.get(node), predecessors)
或者,如果你敢,Y組合器:
在使用(使用列表理解):
>>> print [node for node in path(None, predecessor_map)]
[None]
>>> print [node for node in path(0, predecessor_map)]
[0, None]
>>> print [node for node in path(1, predecessor_map)]
[1, None]
>>> print [node for node in path(2, predecessor_map)]
[2, 1, None]
>>> print [node for node in path(3, predecessor_map)]
[3, 1, None]
>>> print [node for node in path(4, predecessor_map)]
[4, 0, None]
>>> print [node for node in path(5, predecessor_map)]
[5, 1, None]
這是非常清楚的,因爲它是。不要試圖把它作爲一個班輪來破壞它。我想你可以創建一個迭代器來產生每個前導,並使用列表理解,但這只是隱藏了邏輯。 –
你真的沒有一個列表來重複理解,所以我猜不。你的代碼很簡單,你可能完成的任何事情都將是純代碼高爾夫。 – millimoose