广度优先搜索
可以看到,「BFS 遍历」、「层序遍历」、「最短路径」实际上是递进的关系。在 BFS 遍历的基础上区分遍历的每一层,就得到了层序遍历。在层序遍历的基础上记录层数,就得到了最短路径。
BFS 可以用来解决「层序遍历」和「最短路径」的题目
层序遍历的一些变种题目:
- LeetCode 103. Binary Tree Zigzag Level Order Traversal 二叉树的锯齿形层序遍历 -- done
- LeetCode 199. Binary Tree Right Side View 找每一层的最右结点 二叉树的右视图 -- done
- LeetCode 515. Find Largest Value in Each Tree Row 计算每一层的最大值 在每个树行中找最大值 -- done
- LeetCode 637. Average of Levels in Binary Tree 计算每一层的平均值 二叉树的层平均值 -- done
- LeetCode 111. 二叉树的最小深度 -- done (另一种解法)
- LeetCode 104. 二叉树的最大深度 -- done (另一种解法)
- LeetCode 116. 填充每个节点的下一个右侧节点指针 -- done (用层序遍历有点慢,已用另一种解法next连接)
对于最短路径问题,还有两道题目也是求网格结构中的最短路径,和我们讲解的距离岛屿的最远距离非常类似:
还有一道在真正的图结构中求最短路径的问题:
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx 分界线 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-
102. 二叉树的层序遍历 -- done:根据节点到根节点的距离对树的节点进行分层,每一层的节点都是从左到右遍历。
- 解法一:广度优先搜索,迭代。关键点:第 k 次迭代前,队列里的是按从左到右排列的第 k 层节点。
- 解法二:深度优先搜索,递归。关键点:递归时带上节点深度即可。
-
1162. 地图分析 -- done
- 关键点:把距离转换为 BFS 的层数