宽度优先搜索知识点普及(BFS)

本节重点是对宽度优先搜索算法的知识普及。
希望自己的博客能够通俗易懂,与君同学习,共进步。如果有任何心得或疑问,欢迎交流学习。
由于本人实力与精力有限,部分图片可能来源于网络,如有侵权,请联系我删除。

宽度优先搜索(Breadth First Search)是一个针对的遍历算法。最初用于解决迷宫路径网络路由等问题。

下面直接用树的一幅图来展示宽度优先搜索。从头节点1开始,其搜索顺序是1,2,3,4,5,6,7。
在这里插入图片描述
下面的操作步骤需要会背并可以转化为程序:
BFS使用队列来实施算法过程,具体操作步骤如下:

  1. 把起始点放入queue;(如果存在的话)/对应程序:非空判断;创建队列;放入第一个节点/

  2. 重复下述两个步骤,直到队列为空;/对应程序:循环判断队列是否为空,下面两句是循环体内容/
    从队列中取出队列头的点;/对应程序:队列中取出一个节点/

    找到与此点邻接的尚未遍历的点,进行标记,然后全部放入队列中。/对应程序:队列中放入与取出点相邻的所有未遍历的非空点/

此过程非常简单简单,以下用文字进行描述,不再绘图哦。
1.创建队列;
2.放入第一个点(1);
3.循环体
取出1,放入2,3,此时队列有2,3
取出2,放入4,5,此时队列有3,4,5

最终循环体结束,队列无元素。
上述过程非常简单,但对于刚学习的同学,很建议自己完全的在心里想一下这个完整过程。

下面程序需要理解并背会

// 宽度优先搜索用于二叉树遍历
void BFS (TreeNode head) {
	if (head == null) return null;

	Queue<TreeNode> queue = new Linked<TreeNode>();
	queue.offer(head);

	while (!queue.isEmpty()) {
		ListNode node = queue.poll();
		if (node.left != null) queue.offer(node.left);
		if (node.right != null) queue.offer(node.right);
	}
}
/*
写道这里,其实二叉树的宽度优先遍历已经写完了,大家以后遇到的遍历时输出节点了,
按层输出等等其实都是在这个基础上添加了一些小功能而已。
*/

本博客知识点回顾习题

1.宽度优先搜索(Breadth First Search)是一个针对__和__的遍历算法。最初用于解决__和__等问题。
2.BFS使用__来实施算法过程,具体操作步骤是什么?
3.讲题目2中的操作步骤改写为程序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值