DFS
解决哪类问题
代码模板
判出口(终点、越界)->剪枝->扩展->标记->递归->还原
/** Return true if there is a path from cur to target.*/boolean dfs(Node cur, Node target, Set<Node> visited) {if (cur == target) // 退出条件return true;for (Node next: cur.nexts) { // 尝试每一种可能性if (!visited.contains(next)) { // 未访问visited.add(next); // 标记访问if (dfs(next, target, visited)) // 更新结果return true// 部分可能有回溯}}return false;}
复杂度
运用思想
例题
树
| 题目 | 难度 | 推荐指数 |
|---|---|---|
| 17. 电话号码的字母组合 | 中等 | 🤩🤩🤩🤩 |
| 22. 括号生成 | 中等 | 🤩🤩🤩🤩 |
| 37. 解数独 | 困难 | 🤩🤩🤩🤩 |
| 39. 组合总和 | 中等 | 🤩🤩🤩🤩 |
| 40. 组合总和 II | 中等 | 🤩🤩🤩🤩 |
| 211. 添加与搜索单词 - 数据结构设计 | 中等 | 🤩🤩🤩🤩🤩 |
| 282. 给表达式添加运算符 | 困难 | 🤩🤩🤩🤩 |
| 301. 删除无效的括号 | 困难 | 🤩🤩🤩🤩 |
| 310. 最小高度树 | 中等 | 🤩🤩🤩🤩🤩 |
| 341. 扁平化嵌套列表迭代器 | 中等 | 🤩🤩🤩 |
| 386. 字典序排数 | 中等 | 🤩🤩🤩🤩 |
| 397. 整数替换 | 中等 | 🤩🤩🤩🤩 |
| 403. 青蛙过河 | 困难 | 🤩🤩🤩🤩 |
| 427. 建立四叉树 | 中等 | 🤩🤩🤩🤩 |
| 437. 路径总和 III | 中等 | 🤩🤩🤩🤩 |
| 488. 祖玛游戏 | 困难 | 🤩🤩🤩🤩 |
| 494. 目标和 | 中等 | 🤩🤩🤩🤩 |
| 559. N 叉树的最大深度 | 简单 | 🤩🤩🤩🤩 |
| 563. 二叉树的坡度 | 简单 | 🤩🤩🤩🤩 |
| 589. N 叉树的前序遍历 | 简单 | 🤩🤩🤩 |
| 590. N 叉树的后序遍历 | 简单 | 🤩🤩🤩 |
| 606. 根据二叉树创建字符串 | 简单 | 🤩🤩🤩🤩 |
| 638. 大礼包 | 中等 | 🤩🤩🤩🤩 |
| 653. 两数之和 IV - 输入 BST | 简单 | 🤩🤩🤩🤩 |
| 677. 键值映射 | 中等 | 🤩🤩🤩🤩 |
| 690. 员工的重要性 | 简单 | 🤩🤩🤩 |
| 778. 水位上升的泳池中游泳 | 困难 | 🤩🤩🤩 |
| 783. 二叉搜索树节点最小距离 | 简单 | 🤩🤩🤩 |
| 869. 重新排序得到 2 的幂 | 中等 | 🤩🤩🤩🤩 |
| 872. 叶子相似的树 | 简单 | 🤩🤩🤩 |
| 938. 二叉搜索树的范围和 | 简单 | 🤩🤩🤩 |
| 987. 二叉树的垂序遍历 | 困难 | 🤩🤩🤩🤩🤩 |
| 993. 二叉树的堂兄弟节点 | 简单 | 🤩🤩 |
| 1239. 串联字符串的最大长度 | 中等 | 🤩🤩🤩 |
| 1609. 奇偶树 | 中等 | 🤩🤩🤩🤩🤩 |
| 1723. 完成所有工作的最短时间 | 困难 | 🤩🤩🤩 |
| 1766. 互质树 | 困难 | 🤩🤩🤩🤩 |
| 2044. 统计按位或能得到最大值的子集数目 | 困难 | 🤩🤩🤩🤩 |
图
| 题目 | 难度 | 推荐指数 |
|---|---|---|
| 310. 最小高度树 | 中等 | 🤩🤩🤩🤩🤩 |
| 403. 青蛙过河 | 困难 | 🤩🤩🤩🤩 |
| 417. 太平洋大西洋水流问题 | 中等 | 🤩🤩🤩🤩🤩 |
| 778. 水位上升的泳池中游泳 | 困难 | 🤩🤩🤩 |
| 797. 所有可能的路径 | 中等 | 🤩🤩🤩🤩 |
| 863. 二叉树中所有距离为 K 的结点 | 中等 | 🤩🤩🤩🤩 |
| 1020. 飞地的数量 | 中等 | 🤩🤩🤩 |
| 1034. 边界着色 | 中等 | 🤩🤩🤩🤩 |
| 1723. 完成所有工作的最短时间 | 困难 | 🤩🤩🤩 |
| 1766. 互质树 | 困难 | 🤩🤩🤩🤩 |
| 2049. 统计最高分的节点数目 | 中等 | 🤩🤩🤩🤩 |
| LCP 07. 传递信息 | 简单 | 🤩🤩🤩🤩 |
