BFS
解决哪类问题
代码模板
如果不需要确定当前遍历到了哪一层
Deque<Node> queue = new ArrayDeque<>();queue.push(root);while(!queue.isEmpty()) {Node cur = queue.pop(); // 从栈中取出for node in cur.children { // 获取所有邻接节点if (node.isValid() && !isVisit(node)) { // 该节点有效且未访问queue.push(node); // 放入堆栈}}}
如果要确定当前遍历到了哪一层
level表示二叉树遍历到哪一层或者图走了几步、size表示在当前层有多少个元素
Deque<Node> queue = new ArrayDeque<>();queue.push(root)int level = 0while(!queue.isEmpty()) {int size = queue.size();while (size--) {Node cur = queue.pop(); // 从栈中取出for node in cur.children { // 获取所有邻接节点if (node.isValid() && !isVisit(node)) { // 该节点有效且未访问queue.push(node); // 放入堆栈}}}level++;}
复杂度
运用思想
例题
树
| 题目 | 难度 | 推荐指数 |
|---|---|---|
| 90. 子集 II | 中等 | 🤩🤩🤩🤩 |
| 297. 二叉树的序列化与反序列化 | 困难 | 🤩🤩🤩🤩 |
| 397. 整数替换 | 中等 | 🤩🤩🤩🤩 |
| 403. 青蛙过河 | 困难 | 🤩🤩🤩🤩 |
| 429. N 叉树的层序遍历 | 中等 | 🤩🤩🤩🤩 |
| 559. N 叉树的最大深度 | 简单 | 🤩🤩🤩🤩 |
| 589. N 叉树的前序遍历 | 简单 | 🤩🤩🤩 |
| 590. N 叉树的后序遍历 | 简单 | 🤩🤩🤩 |
| 690. 员工的重要性 | 简单 | 🤩🤩🤩 |
| 778. 水位上升的泳池中游泳 | 困难 | 🤩🤩🤩 |
| 783. 二叉搜索树节点最小距离 | 简单 | 🤩🤩🤩 |
| 821. 字符的最短距离 | 简单 | 🤩🤩🤩🤩 |
| 838. 推多米诺 | 中等 | 🤩🤩🤩🤩 |
| 938. 二叉搜索树的范围和 | 简单 | 🤩🤩🤩 |
| 993. 二叉树的堂兄弟节点 | 简单 | 🤩🤩 |
| 1609. 奇偶树 | 中等 | 🤩🤩🤩🤩🤩 |
图
| 题目 | 难度 | 推荐指数 |
|---|---|---|
| 127. 单词接龙 | 困难 | 🤩🤩🤩🤩🤩 |
| 403. 青蛙过河 | 困难 | 🤩🤩🤩🤩🤩 |
| 417. 太平洋大西洋水流问题 | 中等 | 🤩🤩🤩🤩🤩 |
| 752. 打开转盘锁 | 中等 | 🤩🤩🤩🤩 |
| 773. 滑动谜题 | 困难 | 🤩🤩🤩🤩 |
| 815. 公交路线 | 困难 | 🤩🤩🤩🤩 |
| 847. 访问所有节点的最短路径 | 困难 | 🤩🤩🤩🤩🤩 |
| 863. 二叉树中所有距离为 K 的结点 | 中等 | 🤩🤩🤩🤩 |
| 909. 蛇梯棋 | 中等 | 🤩🤩🤩🤩 |
| 1020. 飞地的数量 | 中等 | 🤩🤩🤩 |
| 1034. 边界着色 | 中等 | 🤩🤩🤩🤩 |
| 1036. 逃离大迷宫 | 中等 | 🤩🤩🤩🤩 |
| 1162. 地图分析 | 中等 | 🤩🤩🤩🤩 |
| 1345. 跳跃游戏 IV | 困难 | 🤩🤩🤩🤩🤩 |
| 1765. 地图中的最高点 | 中等 | 🤩🤩🤩🤩 |
| 2039. 网络空闲的时刻 | 中等 | 🤩🤩🤩 |
| 2045. 到达目的地的第二短时间 | 困难 | 🤩🤩🤩🤩 |
| 2059. 转化数字的最小运算数 | 中等 | 🤩🤩🤩🤩🤩 |
| LCP 07. 传递信息 | 简单 | 🤩🤩🤩🤩 |
