C#中的反向宽度优先遍历
任何人都可以在C#中实现Reverse Breadth First遍历算法?
通过反向宽度第一次遍历,我的意思是不是从公共节点开始搜索树,而是想从底部搜索树并逐渐收敛到公共节点。
让我们看下图,这是广度优先遍历的输出:
在我的反向广度优先遍历中, 11
和12
将是找到的前几个节点(它们的顺序并不重要,因为它们都是第一顺序)。 7
和8
是找到的第二个几个节点,依此类推。 1
将是找到的最后一个节点。
任何想法或指针?
编辑:将“广度优先搜索”更改为“广度优先遍历”以澄清问题
从rootNode
运行一个普通的BFS,让depth[i] = linked list of nodes with depth i
。 因此,对于您的示例,您将拥有:
depth[1] = {1}, depth[2] = {2, 3, 4} etc.
。 您可以使用简单的BFS搜索来构建它。 然后打印depth[maxDepth]
所有节点,然后打印depth[maxDepth - 1]
等。
节点i
的深度等于其父节点的深度+ 1.根节点的深度可以被认为是1或0。
使用堆栈和队列的组合。
使用队列执行“正常”BFS(我假设您已经知道),并在遇到它们时继续推送堆栈上的节点。
一旦完成BFS,堆栈将包含反向BFS订单。