对于广度优先搜索算法,与深度优先搜索算法同为经常使用到的搜索算法,广度优先搜索算法一般使用在对树和图的遍历,对于其算法思想是一次性的访问当前节点的所有相邻的节点,并且这些相邻节点是还未被访问过的节点,然后依次对每个节点再进行同样的访问操作,直到之后将所有节点都访问过即结束。而广度优先搜索算法的实现要借助于队列这一数据结构,因为队列的最主要的特征就是先入先出,这样也就可以保证到可以访问到各个节点,广度优先搜索算法作为一种盲目类型的搜索,其查找过程中会全方位覆盖性的堆每个节点的子节点进行访问,所以搜索目标节点的过程中就不考虑目标节点的所有可能的位置,而是非常彻底的对树或者图进行全体搜索。
使用队列的实现过程是,先将起始的节点放入到队列中,然后标记其为已访问过的节点,而当队列不是空队列的时候,就对队列最前部的节点进行访问,访问的过程中就将此节点的所有相邻的没有被访问过的节点依次放入队列中,并且将这些节点标记为已访问过,重复这一过程,直到所有节点都被访问。
根据以上的广度优先搜索算法的思想,对二叉树进行层序遍历,对如下的二叉树进行:
添加图片注释,不超过 140 字(可选)
先从根节点入队,然后进行一个迭代的过程,只要队列不为空的时候,就需要弹出队列最左端的元素并进行输出,然后使输出的这个节点的做优子节点又依次入队,继续迭代过程,这样就可以实现从根节点开始,逐层的从左往右的进行节点访问操作,也就实现这棵树的层序遍历。
添加图片注释,不超过 140 字(可选)
添加图片注释,不超过 140 字(可选)
使用python实现的代码如下:
def Visit(root):
if not root:
return
queue = deque[root]
while queue:
node = queue.popleft()
print(node.val)
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)