我试图理解DFS递归和DFS迭代之间的区别。具有堆栈的那个使用迭代或递归方法吗?
例如,使用图的DFS递归遍历和图的DFS迭代遍历的输出是什么?邻居按字母顺序迭代。
见图:
对于DFS遍历(具有堆栈的那个,不确定它是递归的还是迭代的)这是我得到的:A,C,D,E,F。有人可以确认这是什么类型的DFS遍历,并且另一个怎么样?谢谢!
答案 0 :(得分:4)
据我了解,递归和迭代版本的区别仅在于堆栈的使用。递归版本使用调用堆栈,而迭代版本执行完全相同的步骤,但使用用户定义的堆栈而不是调用堆栈。步骤序列本身没有区别(如果使用合适的打破平局规则来确保子节点的相等遍历序列 - 如果需要),因此无法检查输出以决定是使用迭代还是递归实现
答案 1 :(得分:0)
如另一个答案中所示,使用DFS遍历图形将以相同的方式访问顶点,而不管实际的DFS实现,使用迭代或递归。请参阅Wikipedia article上的伪代码。
您还有一个额外的要求是按字母顺序访问相邻的顶点。这意味着在向其推送内容时(在迭代版本中)必须对堆栈进行排序,或者这意味着您必须按排序顺序(在递归版本中)递归相邻顶点。两种实现都表现得完全相同。
给定字母顺序约束,结果A,C,D,E,F是图表唯一可能的DFS遍历。