DFS递归与DFS迭代

时间:2014-11-20 06:47:45

标签: algorithm recursion depth-first-search

我试图理解DFS递归和DFS迭代之间的区别。具有堆栈的那个使用迭代或递归方法吗?

例如,使用图的DFS递归遍历和图的DFS迭代遍历的输出是什么?邻居按字母顺序迭代。

见图:

enter image description here

对于DFS遍历(具有堆栈的那个,不确定它是递归的还是迭代的)这是我得到的:A,C,D,E,F。有人可以确认这是什么类型的DFS遍历,并且另一个怎么样?谢谢!

2 个答案:

答案 0 :(得分:4)

据我了解,递归和迭代版本的区别仅在于堆栈的使用。递归版本使用调用堆栈,而迭代版本执行完全相同的步骤,但使用用户定义的堆栈而不是调用堆栈。步骤序列本身没有区别(如果使用合适的打破平局规则来确保子节点的相等遍历序列 - 如果需要),因此无法检查输出以决定是使用迭代还是递归实现

答案 1 :(得分:0)

如另一个答案中所示,使用DFS遍历图形将以相同的方式访问顶点,而不管实际的DFS实现,使用迭代或递归。请参阅Wikipedia article上的伪代码。

您还有一个额外的要求是按字母顺序访问相邻的顶点。这意味着在向其推送内容时(在迭代版本中)必须对堆栈进行排序,或者这意味着您必须按排序顺序(在递归版本中)递归相邻顶点。两种实现都表现得完全相同。

给定字母顺序约束,结果A,C,D,E,F是图表唯一可能的DFS遍历。