将图表的BFS代码转换为DFS代码

时间:2013-12-26 17:01:18

标签: algorithm data-structures graph tree

如果这个问题听起来含糊不清,我很抱歉,但在接受采访时我被问到这个问题。

在图表/树中编写BFS程序。

我使用队列编写了流行的代码。

现在他让我通过修改我刚刚编写的BFS代码中的一行来将其转换为DFS代码。

我能想到的唯一答案是为DFS使用堆栈。然后我使用2个队列实现了堆栈。

所以最后我的回答是: 使用1队列进行BFS。 对于DFS而言,使用2个队列。

他没有给我任何反馈。没雇用:(

我的方法是好还是有更好的方法? 请帮忙。 :)

3 个答案:

答案 0 :(得分:3)

我假设您的BFS答案将继续从队列中删除节点(FIFO数据结构),直到完成,并且对于每个删除/访问的节点,将该节点的子节点添加到队列中,因为您要访问这些节点到目前为止你发现的所有节点之后的节点。

在DFS中,您希望在目前为止保存的任何其他孩子之前访问这些孩子,因此您需要一个LIFO数据结构。

或者,正如@joews所说:将队列换成堆栈。

答案 1 :(得分:2)

交换堆栈的队列 - 没有更多的东西。

答案 2 :(得分:2)

面试官可能希望你使用递归。

  1. 不是将子节点推送到队列,而是调用它们上的递归函数。
  2. 然后继续像现在一样遍历兄弟姐妹。