我需要一种算法来计算给定树结构的所有可能排列,例如:
4 3
\ |
\ 2
\ /
1
这意味着,(4) 需要在 (1) 之前排序,(3) 在 (2) 之前和 (2) 在 (1) 之前排序。因此输出应该包含所有且不超过以下内容:
[4,3,2,1]
[3,4,2,1]
[3,2,4,1]
例如,无效的订单是
[4,2,3,1]
因为 (2) 在 (3) 之前,但 (2) 在图中是 (3) 的后继。出于效率的原因,简单地计算所有排列和过滤无效排序是行不通的。
我不需要确切的代码,了解通常如何做到这一点已经非常有帮助。