前言
这两种都是作为经典的图搜索算法,目的都是系统地展开并检查图中所有的节点,但是这两种算法有着不同的搜索方式,以搜索二叉树为例(二叉树其实也是一种特殊的图结构),广度优先搜索(BFS)从上往下搜索只有等待上一层所有节点都遍历完毕才会转到下一层,而深度优先搜索(DFS)则是开始就一直往深处走,知道找到解或者走到底部为止。
广度优先搜索(BFS)
BFS思想(以二叉树为例子)
1、从根节点开始;
2、将节点保存到队列(queue)中
3、取出队列中首位节点,读取该节点的值和判断是否有孩子节点,若有则将孩子节点依次添加到队列尾部
4、重复3步骤,直到队列为空
# 定义树节点的类
class TreeNode:
def __init__(self, val):
self.val = val
self.left = None
self.right = None
def BFS(node):
# 广度优先算法使用队列
if node is None:
return None
queue = [node]
result = []
while len(queue):
cnt = queue.pop(0) # 取出队列中首位节点
result.append(cnt.val) # 读取该节点的值
if cnt.left: #