说到简单搜索,主要就是将以深度优先搜索和广度优先搜索。
为什么要叫深度优先和广度优先的搜索呢?
- 因为搜索是建立树的这种结构上的。无论是深度优先搜索还是广度优先搜索,都是从树根开始依次向下搜索。
-
这个时候深度优先和广度优先的区别就出来了。
-
很显然,深度优先是从一个树根一直搜索到最底层的子节点然后再回到根进行另外一个子节点的搜索
![](https://i-blog.csdnimg.cn/blog_migrate/971f878541fd7dc91833c663a643b9d2.png)
比如针对与这个树我们的深度搜索是从A->B->D然后返回B->E然后返回A->C->F。
- 我们可以通过栈的思想来进行搜索,A入栈,B入栈,D入栈然后搜索,D出栈,E入栈,进行搜索,E出栈,B出栈,C入栈,F入栈进行搜索,然后全部出栈。
-
当然实际上是通过递归的操作来实现栈上的搜索。
-
接下来说说广度优先搜索
还是借用上图
- 广度优先搜索顾名思义,以横向优先,所以我们的搜索是逐层搜索。
-
搜索顺序是A,B->C,D->E->F.
我们实际实现是通过队列来实现的。
- 首先,将A入队,进行搜索判断。
- 将B,C入队,A出队,进行搜索判断。
- 将D,E,F入队,B,C出队进行搜索判断。
-
清空队列。
为了避免重复搜索,我们可以开一个布尔数组,进行判断是否搜索。