用栈替代队列实现BFS是否等同于无递归DFS?
用栈替代队列实现BFS是否等价于无递归DFS?
是的,这个观点完全正确。
常规BFS依赖队列的**先进先出(FIFO)特性,按层级依次处理节点,确保同一层的节点全部处理完后才进入下一层。而换成栈的后进先出(LIFO)**结构后,每次弹出栈顶元素并推入其子节点时,下一个被处理的必然是刚推入的子节点——也就是会优先沿着当前节点的分支深入遍历,而非处理同层级的其他节点,这正好契合DFS“先探到底、再回溯”的核心逻辑,属于无递归的DFS实现。
举个二叉树的直观例子:
假设树结构如下:
1 / \ 2 3 / \ 4 5
- 队列实现的BFS遍历顺序:
1 → 2 → 3 → 4 → 5(严格按层级遍历) - 栈替代队列时,若按「先左子节点、后右子节点」的顺序压入子节点,遍历顺序为
1 → 3 → 2 → 5 → 4(反向先序DFS);若按「先右子节点、后左子节点」的顺序压入,遍历顺序则为1 → 2 → 4 → 5 → 3(标准先序DFS)
无论子节点的压入顺序如何,核心都是优先深入分支而非按层级推进,因此这确实是无递归的DFS实现。
内容的提问来源于stack exchange,提问作者Shisui
相关产品推荐
相关产品推荐

