我偶尔会使用一种设计模式,我不知道它叫什么。也许它有一个名字,有人知道吗?
当我想遍历树状结构并在其所有节点上执行某些操作时,我会使用它。它是这样的:
nodes_to_handle = [root_node]
while nodes_to_handle:
node = nodes_to_handle.pop()
# handle node
nodes_to_handle += node.get_neighbors()
请注意,结构不必是树;例如,此模式可用于在数组中执行泛洪填充。
那么,这种设计模式是否有可接受的名称?
答案 0 :(得分:3)
这看起来像深度优先遍历算法。 (因为你从最后弹出列表)
它可以通过几种不同的方式实现:
#handle node
代码)。
编辑:没有正确查看代码。 :)
答案 1 :(得分:3)
我认为你得到的是比深度优先遍历更普遍的模式:前沿列表。边界列表是仍需要处理的(已排序或未排序)元素列表;算法继续删除元素并处理它们,直到列表为空或满足其他一些终止条件。
我最喜欢这种模式的例子是dijkstra的算法。在Dijkstra中,前沿列表是优先级队列或堆,每次迭代都会从堆中弹出最小值的元素。
答案 2 :(得分:1)
这是depth-first graph traversal。它是algorithm,而不是design pattern。 (来自Jochen Ritzel的评论。)