Algorithm 将图形的BFS代码转换为DFS代码

Algorithm 将图形的BFS代码转换为DFS代码,algorithm,data-structures,graph,tree,Algorithm,Data Structures,Graph,Tree,如果这个问题听起来模棱两可,我很抱歉,但我是在一次采访中被问到这个问题的 在图形/树中为BFS编写程序。 我使用队列编写了流行代码 现在,他让我通过修改我刚刚编写的BFS代码的一行,将其转换为DFS代码 我能想到的唯一答案是为DFS使用堆栈。然后,我使用2个队列实现了堆栈 所以最后我的回答是: BFS使用1个队列。 对于DFS,请改为使用2个队列 他没有给我任何反馈。没有被雇佣:( 我的方法很好还是有更好的方法? 请提供帮助。:将队列交换为堆栈-没有更多内容了 我假设您的BFS答案会一直从队列中

如果这个问题听起来模棱两可,我很抱歉,但我是在一次采访中被问到这个问题的

在图形/树中为BFS编写程序。

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

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

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

所以最后我的回答是: BFS使用1个队列。 对于DFS,请改为使用2个队列

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

我的方法很好还是有更好的方法?
请提供帮助。:

将队列交换为堆栈-没有更多内容了

我假设您的BFS答案会一直从队列中移除节点(FIFO数据结构),直到完成为止,并且对于移除/访问的每个节点,都会将该节点的子节点添加到队列中,因为您希望在发现所有节点之后再访问这些节点

在DFS中,您希望在访问到目前为止已保存的任何其他子项之前访问这些子项,因此需要后进先出的数据结构


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

面试官可能希望您使用递归

  • 不要将子节点推到队列中,而是对它们调用递归函数
  • 然后继续像目前一样遍历兄弟姐妹

  • 显示您为BFS编写的代码。我很确定这需要的不仅仅是更改一行。@Dukeling应该通过将queue.push(child1)更改为just recure(child1)来实现。我很确定它确实如此。我从未见过兄弟姐妹被推到堆栈上。老实说,我还没有看到您甚至可以访问兄弟姐妹的实现。但我猜我误解了你,但我确实误解了。所以我猜他大概不想回答。无论如何,谢谢!