我正在回顾深度优先搜索(DFS)和呼吸优先搜索(BFS)的概念,但我总是忘记我是否可以采取一些规则。
我知道在DFS中我将从root开始,尽可能地走,然后回来,(...) 在BFS中,我将开始访问root及其所有邻居,(...)
我的问题是,如果我有多个选项,我可以做出假设或"规则"?
即:
我的节点是字母的图表中的DSF - 我决定从根开始按字母顺序开始搜索。
树上的BFS - 我决定从左边的邻居开始。
可以定义这个东西还是有一个主要规则(除了搜索的目的)?
答案 0 :(得分:3)
没有这样做的主要规则。根据您使用BFS或DFS的目的,如果您使用的顺序很重要,那么您应该这样做,否则任何顺序 - 字母,随机,等等 - 都可以。唯一重要的是,在BFS中,您应该首先遇到root的直接邻居,按照您看到的顺序对所有看到的节点执行相同操作。例如,如果 R 是树的根,而 [LC,RC] 是其子项。每个人在做BFS时分别有孩子 [LC1,LC2] 和 [RC1,RC2] ,在访问R后你可以按照你喜欢的任何顺序访问LC和RC 。但是,如果您第一次遇到LC,则必须首先检查LC1和LC2,然后检查RC1和RC2。您可以再次以任何顺序检查LC1和LC2。使用 队列 可以轻松实现这一目标。因此,您访问的第一件事,在下一个级别,您将首先看到它的邻居。