BFS
1、概念
BFS:宽度优先搜索(breadth-first-search)
- 将问题抽象成图,利用队列实现 ,每次将一个节点周围的所有节点加入队列
- 空间复杂度比DFS大很多
2、框架本质
问题核心:
- 在一副图中,从start(起点)到target(目标点)的最短路径
框架实现:
// 计算从节点start到目标target节点的最短距离长度
int BFS(Node start, Node target) {
Queue<Node> queue;// 队列
Set<Node> set;// 记录走过得到节点
int step = 0;// 记录走过的步数
// 首先将起始节点加入队列和set中
queue.add(start);
set.add(start);
// 开始循环遍历
while (!queue.isEmpty()) {
// 首先记录队列中目前的大小
int size = queue.size();
// 将队列中的所有节点向四周扩散
for (int i = 0; i < size; i++) {
Node cur = queue.poll();
// 判断当前元素是否是目标
if (cur == target) {
return step;
}
// 将当前元素的周边元素全部加入到队列和set中
for (Node around : cur.around()) {
if (!set.contains(around)) {
queue.add(around);
set.add(around)
}
}
}
// 更新距离
step++;
}
}
3、二叉树的的最小高度
力扣111题链接:地址点我
class Solution {
public int minDepth(TreeNode root) {
// 先行条件判断
if (root == null) {
return 0;
}
// 定义一个队列去存放元素(关键结构)
Queue<TreeNode> queue = new LinkedList<TreeNode>();
// 由于