链表、树与回溯
阶段二从这里开始,之后的每份题单都离不开递归。链表和二叉树是大多数人第一次写出“自己调用自己”的函数的地方,回溯则把同样的思路延伸为把每种选择都试一遍、再撤回来。
五个章节从链表开始(比如“反转链表”这类题),接着是二叉树、一般树、回溯,最后是递归与分治。适合想先把递归写顺手、再进入网格图、动态规划和图论的人。
292 道题难度分 1151–30185 章节
进入书房
想有人陪你把这份题单做完吗?登录后进入书房,女主角会一次递给你一道题。
一、Linked List
§1.1 遍历Linked List
| 题目 | 难度分 |
|---|---|
| 1290. 二进制链表转整数 | 1151 |
| 2058. 找出临界点之间的最小和最大距离 | 1311 |
| 2181. 合并零之间的节点 | 1333 |
| 725. 分隔链表 | 未评分 |
| 817. 链表组件 | 1429 |
§1.2 删除节点
| 题目 | 难度分 |
|---|---|
| 203. 移除链表元素 | 未评分 |
| 3217. 从链表中移除在数组中存在的节点 | 1342 |
| 83. 删除排序链表中的重复元素 | 未评分 |
| 82. 删除排序链表中的重复元素 II | 未评分 |
| 237. 删除链表中的节点 | 未评分 |
| 1669. 合并两个链表 | 1428 |
| 2487. 从链表中移除节点 | 1455 |
§1.3 插入节点
| 题目 | 难度分 |
|---|---|
| 2807. 在链表中插入最大公约数 | 1279 |
| 147. 对链表进行插入排序 | 未评分 |
§1.4 反转Linked List
| 题目 | 难度分 |
|---|---|
| 206. 反转链表 | 未评分 |
| 92. 反转链表 II | 未评分 |
| 24. 两两交换链表中的节点 | 未评分 |
| 25. K 个一组翻转链表 | 未评分 |
| 2074. 反转偶数长度组的节点 | 1685 |
§1.5 前后pointer
| 题目 | 难度分 |
|---|---|
| 19. 删除链表的倒数第 N 个结点 | 未评分 |
| 61. 旋转链表 | 未评分 |
| 1721. 交换链表中的节点 | 1387 |
§1.6 fast-slow pointers
| 题目 | 难度分 |
|---|---|
| 876. 链表的中间结点 | 1232 |
| 2095. 删除链表的中间节点 | 1324 |
| 234. 回文链表 | 未评分 |
| 2130. 链表最大孪生和 | 1318 |
| 143. 重排链表 | 未评分 |
| 141. 环形链表 | 未评分 |
| 142. 环形链表 II | 未评分 |
| 457. 环形数组是否存在循环 | 未评分 |
§1.8 合并Linked List
| 题目 | 难度分 |
|---|---|
| 2. 两数相加 | 未评分 |
| 445. 两数相加 II | 未评分 |
| 2816. 翻倍以链表形式表示的数字 | 1394 |
| 21. 合并两个有序链表 | 未评分 |
§1.9 Divide and Conquer
| 题目 | 难度分 |
|---|---|
| 23. 合并 K 个升序链表 | 未评分 |
| 148. 排序链表 | 未评分 |
§1.10 综合应用
| 题目 | 难度分 |
|---|---|
| 1171. 从链表中删去总和值为零的连续节点 | 1782 |
| 707. 设计链表 | 未评分 |
| 146. LRU 缓存 | 未评分 |
| 460. LFU 缓存 | 未评分 |
| 432. 全 O(1) 的数据结构 | 未评分 |
| 1206. 设计跳表 | 未评分 |
§1.11 其他
| 题目 | 难度分 |
|---|---|
| 138. 随机链表的复制 | 未评分 |
| 382. 链表随机节点 | 未评分 |
| 430. 扁平化多级双向链表 | 未评分 |
二、Binary Tree
§2.1 遍历Binary Tree
| 题目 | 难度分 |
|---|---|
| 144. 二叉树的前序遍历 | 未评分 |
| 94. 二叉树的中序遍历 | 未评分 |
| 145. 二叉树的后序遍历 | 未评分 |
| 872. 叶子相似的树 | 1288 |
| 404. 左叶子之和 | 未评分 |
| 671. 二叉树中第二小的节点 | 未评分 |
§2.2 自顶向下 DFS(Preorder Traversal)
| 题目 | 难度分 |
|---|---|
| 104. 二叉树的最大深度 | 未评分 |
| 111. 二叉树的最小深度 | 未评分 |
| 112. 路径总和 | 未评分 |
| 129. 求根节点到叶节点数字之和 | 未评分 |
| 199. 二叉树的右视图 | 未评分 |
| 1448. 统计二叉树中好节点的数目 | 1360 |
| 1315. 祖父节点值为偶数的节点和 | 1427 |
| 988. 从叶结点开始的最小字符串 | 1429 |
| 1026. 节点与其祖先之间的最大差值 | 1446 |
| 1022. 从根到叶的二进制数之和 | 1462 |
| 623. 在二叉树中增加一行 | 未评分 |
| 1372. 二叉树中的最长交错路径 | 1713 |
| 971. 翻转二叉树以匹配先序遍历 | 1787 |
§2.3 自底向上 DFS(Postorder Traversal)
| 题目 | 难度分 |
|---|---|
| 104. 二叉树的最大深度 | 未评分 |
| 111. 二叉树的最小深度 | 未评分 |
| 965. 单值二叉树 | 1178 |
| 100. 相同的树 | 未评分 |
| 101. 对称二叉树 | 未评分 |
| 951. 翻转等价二叉树 | 1477 |
| 1379. 找出克隆二叉树中的相同节点 | 未评分 |
| 110. 平衡二叉树 | 未评分 |
| 226. 翻转二叉树 | 未评分 |
| 617. 合并二叉树 | 未评分 |
| 2331. 计算布尔二叉树的值 | 1304 |
| 508. 出现次数最多的子树元素和 | 未评分 |
| 563. 二叉树的坡度 | 未评分 |
| 606. 根据二叉树创建字符串 | 未评分 |
| 2265. 统计值等于子树平均值的节点数 | 1473 |
| 1026. 节点与其祖先之间的最大差值 | 1446 |
| 3319. 第 K 大的完美二叉子树的大小 | 1603 |
| 1339. 分裂二叉树的最大乘积 | 1675 |
| 1372. 二叉树中的最长交错路径 | 1713 |
| 1145. 二叉树着色游戏 | 1741 |
| 572. 另一棵树的子树 | 未评分 |
| 1530. 好叶子节点对的数量 | 1746 |
§2.4 自底向上 DFS:删点
| 题目 | 难度分 |
|---|---|
| 814. 二叉树剪枝 | 1380 |
| 1325. 删除给定值的叶子节点 | 1407 |
| 1110. 删点成林 | 1511 |
§2.5 有递有归
| 题目 | 难度分 |
|---|---|
| 538. 把二叉搜索树转换为累加树 | 未评分 |
| 1038. 从二叉搜索树到更大和树 | 1375 |
| 865. 具有所有最深节点的最小子树 | 1534 |
| 1080. 根到叶路径上的不足节点 | 1805 |
§2.6 Binary Tree的直径
| 题目 | 难度分 |
|---|---|
| 543. 二叉树的直径 | 未评分 |
| 687. 最长同值路径 | 未评分 |
| 124. 二叉树中的最大路径和 | 未评分 |
| 2385. 感染二叉树需要的总时间 | 1711 |
§2.7 Backtracking
| 题目 | 难度分 |
|---|---|
| 257. 二叉树的所有路径 | 未评分 |
| 113. 路径总和 II | 未评分 |
| 1457. 二叉树中的伪回文路径 | 1405 |
| 437. 路径总和 III | 未评分 |
§2.8 Lowest Common Ancestor (LCA)
| 题目 | 难度分 |
|---|---|
| 235. 二叉搜索树的最近公共祖先 | 未评分 |
| 236. 二叉树的最近公共祖先 | 未评分 |
| 1123. 最深叶节点的最近公共祖先 | 1607 |
| 2096. 从二叉树一个节点到另一个节点每一步的方向 | 1805 |
§2.9 Binary Search Tree
§2.10 创建Binary Tree
| 题目 | 难度分 |
|---|---|
| 108. 将有序数组转换为二叉搜索树 | 未评分 |
| 998. 最大二叉树 II | 1498 |
| 1008. 前序遍历构造二叉搜索树 | 1563 |
| 1382. 将二叉搜索树变平衡 | 1541 |
| 2196. 根据描述创建二叉树 | 1644 |
| 105. 从前序与中序遍历序列构造二叉树 | 未评分 |
| 106. 从中序与后序遍历序列构造二叉树 | 未评分 |
| 889. 根据前序和后序遍历构造二叉树 | 1732 |
| 1028. 从先序遍历还原二叉树 | 1797 |
§2.11 插入/删除节点
| 题目 | 难度分 |
|---|---|
| 701. 二叉搜索树中的插入操作 | 未评分 |
| 450. 删除二叉搜索树中的节点 | 未评分 |
| 669. 修剪二叉搜索树 | 未评分 |
§2.12 Tree DP
| 题目 | 难度分 |
|---|---|
| 337. 打家劫舍 III | 未评分 |
| 968. 监控二叉树 | 2124 |
§2.13 Binary Tree BFS
| 题目 | 难度分 |
|---|---|
| 102. 二叉树的层序遍历 | 未评分 |
| 103. 二叉树的锯齿形层序遍历 | 未评分 |
| 107. 二叉树的层序遍历 II | 未评分 |
| 199. 二叉树的右视图 | 未评分 |
| 513. 找树左下角的值 | 未评分 |
| 515. 在每个树行中找最大值 | 未评分 |
| 637. 二叉树的层平均值 | 未评分 |
| 1161. 最大层内元素和 | 1250 |
| 993. 二叉树的堂兄弟节点 | 1288 |
| 2583. 二叉树中的第 K 大层和 | 1374 |
| 1302. 层数最深叶子节点的和 | 1388 |
| 2415. 反转二叉树的奇数层 | 1431 |
| 1609. 奇偶树 | 1438 |
| 623. 在二叉树中增加一行 | 未评分 |
| 2471. 逐层排序二叉树所需的最少操作数目 | 1635 |
| 2641. 二叉树的堂兄弟节点 II | 1677 |
| 919. 完全二叉树插入器 | 1691 |
| 958. 二叉树的完全性检验 | 1703 |
| 863. 二叉树中所有距离为 K 的结点 | 1663 |
| 662. 二叉树最大宽度 | 未评分 |
§2.14 Linked List+Binary Tree
| 题目 | 难度分 |
|---|---|
| 114. 二叉树展开为链表 | 未评分 |
| 1367. 二叉树中的链表 | 1650 |
| 109. 有序链表转换二叉搜索树 | 未评分 |
| 116. 填充每个节点的下一个右侧节点指针 | 未评分 |
| 117. 填充每个节点的下一个右侧节点指针 II | 未评分 |
§2.15 N 叉树
| 题目 | 难度分 |
|---|---|
| 589. N 叉树的前序遍历 | 未评分 |
| 590. N 叉树的后序遍历 | 未评分 |
| 559. N 叉树的最大深度 | 未评分 |
| 429. N 叉树的层序遍历 | 未评分 |
| 427. 建立四叉树 | 未评分 |
| 558. 四叉树交集 | 未评分 |
§2.16 其他
| 题目 | 难度分 |
|---|---|
| 1261. 在受污染的二叉树中查找元素 | 1440 |
| 1104. 二叉树寻路 | 1545 |
| 987. 二叉树的垂序遍历 | 1676 |
| 655. 输出二叉树 | 未评分 |
| 979. 在二叉树中分配硬币 | 1709 |
| 222. 完全二叉树的节点个数 | 未评分 |
| 297. 二叉树的序列化与反序列化 | 未评分 |
| 449. 序列化和反序列化二叉搜索树 | 未评分 |
| 331. 验证二叉树的前序序列化 | 未评分 |
| 652. 寻找重复的子树 | 未评分 |
| 173. 二叉搜索树迭代器 | 未评分 |
| 2049. 统计最高分的节点数目 | 1912 |
| 2673. 使二叉树所有路径值相等的最小代价 | 1917 |
| 2509. 查询树中环的长度 | 1948 |
| 2458. 移除子树后的二叉树高度 | 2299 |
三、一般树
§3.1 遍历
| 题目 | 难度分 |
|---|---|
| 2368. 受限条件下可到达节点的数目 | 1477 |
| 1466. 重新规划路线 | 1634 |
§3.2 自顶向下 DFS
| 题目 | 难度分 |
|---|---|
| 1376. 通知所有员工所需的时间 | 1561 |
| 3528. 单位转换 I | 1580 |
| 1443. 收集树上所有苹果的最少时间 | 1683 |
| 1377. T 秒后青蛙的位置 | 1824 |
| 3067. 在带权树网络中统计可连接服务器对数目 | 1909 |
| 3372. 连接两棵树后最大目标节点数目 I | 1927 |
| 2467. 树上最大得分和路径 | 2053 |
| 3373. 连接两棵树后最大目标节点数目 II | 2162 |
| 1766. 互质树 | 2232 |
| 2791. 树中可以形成回文的路径数 | 2677 |
§3.3 自底向上 DFS
| 题目 | 难度分 |
|---|---|
| 690. 员工的重要性 | 未评分 |
| 3249. 统计好节点的数目 | 1566 |
| 1519. 子树中标签相同的节点数 | 1809 |
| 3558. 给边赋权值的方案数 I | 1845 |
| 3593. 使叶子路径成本相等的最小增量 | 1959 |
| 2872. 可以被 K 整除连通块的最大数目 | 1968 |
| 2477. 到达首都的最少油耗 | 2012 |
| 2973. 树中每个节点放置的金币数目 | 2277 |
| 2440. 创建价值相同的连通块 | 2460 |
§3.4 有递有归
| 题目 | 难度分 |
|---|---|
| 3593. 使叶子路径成本相等的最小增量 | 1959 |
| 3331. 修改后子树的大小 | 2046 |
§3.5 树的直径
| 题目 | 难度分 |
|---|---|
| 2246. 相邻字符不同的最长路径 | 2126 |
| 3203. 合并两棵树后的最小直径 | 2266 |
| 1617. 统计子树中城市之间最大距离 | 2309 |
| 2538. 最大价值和与最小价值和的差值 | 2398 |
§3.6 树的Topological Sort
| 题目 | 难度分 |
|---|---|
| 310. 最小高度树 | 未评分 |
| 2603. 收集树中金币 | 2712 |
§3.7 DFS 时间戳
| 题目 | 难度分 |
|---|---|
| 3515. 带权树中的最短路径 | 2312 |
| 2322. 从树中删除边的最小分数 | 2392 |
| 3327. 判断 DFS 字符串是否是回文串 | 2454 |
| 3590. 第 K 小的路径异或和 | 2646 |
§3.8 Lowest Common Ancestor (LCA)、Binary Lifting
| 题目 | 难度分 |
|---|---|
| 1483. 树节点的第 K 个祖先 | 2115 |
| 3559. 给边赋权值的方案数 II | 2146 |
| 3553. 包含给定路径的最小带权子树 II | 2411 |
| 3585. 树中找到带权中位节点 | 2429 |
| 2846. 边权重均等查询 | 2508 |
| 2646. 最小化旅行的价格总和 | 2238 |
§3.9 树上Sliding Window
| 题目 | 难度分 |
|---|---|
| 3425. 最长特殊路径 | 2435 |
| 3486. 最长特殊路径 II | 2925 |
§3.10 树上Small-to-Large Merging
| 题目 | 难度分 |
|---|---|
| 2003. 每棵子树内缺失的最小基因值 | 2415 |
| 3590. 第 K 小的路径异或和 | 2646 |
| 3575. 最大好子树分数 | 2360 |
§3.11 Centroid Decomposition
| 题目 | 难度分 |
|---|---|
| 3372. 连接两棵树后最大目标节点数目 I | 1927 |
§3.12 其他
| 题目 | 难度分 |
|---|---|
| 2867. 统计树中的合法路径数目 | 2428 |
| 2421. 好路径的数目 | 2445 |
| 1719. 重构一棵树的方案数 | 3018 |
四、Backtracking
§4.1 入门Backtracking
| 题目 | 难度分 |
|---|---|
| 17. 电话号码的字母组合 | 未评分 |
§4.2 子集型Backtracking
| 题目 | 难度分 |
|---|---|
| 78. 子集 | 未评分 |
| 1863. 找出所有子集的异或总和再求和 | 1372 |
| 784. 字母大小写全排列 | 1342 |
| 3566. 等积子集的划分方案 | 1459 |
| 2044. 统计按位或能得到最大值的子集数目 | 1568 |
| 2397. 被列覆盖的最多行数 | 1719 |
| 1239. 串联字符串的最大长度 | 1720 |
| 2212. 射箭比赛中的最大得分 | 1869 |
| 1255. 得分最高的单词集合 | 1882 |
| 2151. 基于陈述统计最多好人数 | 1980 |
| 2597. 美丽子集的数目 | 2023 |
| 2959. 关闭分部的可行集合数目 | 2077 |
| 1601. 最多可达成的换楼请求数目 | 2119 |
| 1617. 统计子树中城市之间最大距离 | 2309 |
§4.3 划分型Backtracking
| 题目 | 难度分 |
|---|---|
| 131. 分割回文串 | 未评分 |
| 2698. 求一个整数的惩罚数 | 1679 |
| 1593. 拆分字符串使唯一子字符串的数目最大 | 1740 |
| 1849. 将字符串拆分为递减的连续值 | 1747 |
| 93. 复原 IP 地址 | 未评分 |
| 140. 单词拆分 II | 未评分 |
§4.4 组合型Backtracking
| 题目 | 难度分 |
|---|---|
| 77. 组合 | 未评分 |
| 216. 组合总和 III | 未评分 |
| 1286. 字母组合迭代器 | 1591 |
| 22. 括号生成 | 未评分 |
| 301. 删除无效的括号 | 未评分 |
§4.5 排列型Backtracking
| 题目 | 难度分 |
|---|---|
| 46. 全排列 | 未评分 |
| 3376. 破解锁的最少时间 I | 1793 |
| 51. N 皇后 | 未评分 |
| 52. N 皇后 II | 未评分 |
| 2850. 将石头分散到网格图的最少移动次数 | 2001 |
| 1718. 构建字典序最大的可行序列 | 2080 |
| 1307. 口算难题 | 2250 |
| 37. 解数独 | 未评分 |
§4.6 有重复元素的Backtracking
| 题目 | 难度分 |
|---|---|
| 90. 子集 II | 未评分 |
| 40. 组合总和 II | 未评分 |
| 491. 非递减子序列 | 未评分 |
| 47. 全排列 II | 未评分 |
| 1079. 活字印刷 | 1741 |
| 3646. 下一个特殊回文数 | 2445 |
| 2014. 重复 K 次的最长子序列 | 2558 |
§4.7 搜索
| 题目 | 难度分 |
|---|---|
| 3211. 生成不含相邻零的二进制字符串 | 1353 |
| 967. 连续差相同的数字 | 1433 |
| 2094. 找出 3 位偶数 | 1455 |
| 1415. 长度为 n 的开心字符串中字典序第 k 小的字符串 | 1576 |
| 1219. 黄金矿工 | 1663 |
| 79. 单词搜索 | 未评分 |
| 980. 不同路径 III | 1830 |
| 2002. 两个回文子序列长度的最大乘积 | 1869 |
| 1255. 得分最高的单词集合 | 1882 |
| 3669. K 因数分解 | 1917 |
| 473. 火柴拼正方形 | 未评分 |
| 212. 单词搜索 II | 未评分 |
| 638. 大礼包 | 未评分 |
| 126. 单词接龙 II | 未评分 |
| 691. 贴纸拼词 | 未评分 |
| 2056. 棋盘上有效移动组合的数目 | 2611 |
| 2386. 找出数组的第 K 大和 | 2648 |
| 3509. 最大化交错和为 K 的子序列乘积 | 2703 |
| 488. 祖玛游戏 | 未评分 |
§4.8 折半枚举
| 题目 | 难度分 |
|---|---|
| 805. 数组的均值分割 | 1983 |
| 494. 目标和 | 未评分 |
| 3566. 等积子集的划分方案 | 1459 |
| 1755. 最接近目标值的子序列和 | 2364 |
| 956. 最高的广告牌 | 2381 |
| 2035. 将数组分成两个数组并最小化数组和的差 | 2490 |
| 3267. 统计近似相等数对 II | 2545 |
五、其他Recursion/Divide and Conquer
五、其他Recursion/Divide and Conquer
| 题目 | 难度分 |
|---|---|
| 3537. 填充特殊网格 | 1542 |
| 912. 排序数组 | 未评分 |
| 880. 索引处的解码字符串 | 2011 |
| 3307. 找出第 K 个字符 II | 2232 |
| 1545. 找出第 N 个二进制字符串中的第 K 位 | 1479 |
| 3614. 用特殊操作处理字符串 II | 2011 |
| 932. 漂亮数组 | 2294 |
这是阶段二的第一份题单;路线建议在“字符串与自动机”之后进入,但签订学习契约时直接选它,也能从这里开始。
难度分来自 zerotrac 的 LeetCode 竞赛评分。部分题目没有 zerotrac 分数,会标记为“未评分”。
进入书房