给定升序链表,构造一棵高度平衡的二叉搜索树。一个真实会犯的错误是找到链表中点后忘了断开左半部分,导致递归永远看到同一段链表、无限递归崩溃:本文用真实反例验证,再给出正确写法和 5 种语言实现。
给定一棵二叉树,判断它是否高度平衡。一个常见陷阱是只检查根这一层的高度差,忽略了子树内部也要满足这个条件:本文用真实反例和 30000 组随机树验证,13% 的情况会被误判为平衡,再给出正确的 O(n) 写法和 5 种语言实现。
给定一棵二叉树,求它的最小深度。一个常见陷阱是照搬最大深度的写法直接 1+min(左,右),没有特判只有一侧孩子的情况:本文用真实反例和 30000 组随机树验证,62.5% 的树会给出错误答案,再给出正确写法和 5 种语言实现。
给定一棵二叉树和目标和,判断是否存在根到叶子的路径和恰好等于目标值。一个常见陷阱是累计和等于目标值就返回真,忘了要求当前结点必须是叶子:本文用真实反例和 2 万组随机测试验证,一半的情况会给出错误答案,再给出正确写法和 5 种语言实现。
给定二叉树和目标和,找出所有根到叶子路径和等于目标值的路径。一个经典陷阱是记录结果时直接存共享的可变列表引用,而不是拷贝一份:本文用真实反例演示回溯的 pop 会把已经存好的结果也清空成空列表,再给出正确写法和 5 种语言实现。
给定一棵二叉树,原地把它拉直成一条只用 right 指针连接的链表。一个容易漏掉的陷阱是只重连 right 指针、忘了清空 left:right 链的值序列看起来完全正确,但树并没有真正拉直。本文用真实反例和 5000 组随机树验证这个错误是系统性的,再给出正确写法和 5 种语言实现。
给定字符串 s 和 t,求 s 的子序列中等于 t 的不同方案数。一个极易漏掉的陷阱是 DP 的边界 dp[i][0] 没有初始化成 1,导致整张表必然算出 0:本文用真实反例和 2000 组随机测试验证,再给出正确写法和 5 种语言实现。
给定一棵完美二叉树,把每个结点的 next 指针指向右边的相邻结点。一个容易漏掉的陷阱是只连接同一父结点下的左右孩子,漏了跨父结点边界的连接:本文用真实反例证明,从第三层起最底层永远只能连上 2 个结点,再给出正确写法和 5 种语言实现。
和116题一样填充 next 指针,但这次树不保证是完美二叉树。一个真实会犯的错误是照搬116题的写法,假设每个结点的左右孩子必然成对存在:本文用真实反例和2000组随机测试验证,超过四分之一的树会直接崩溃,再给出正确的哨兵写法和 5 种语言实现。
生成杨辉三角的前 numRows 行。一个容易踩的坑是不特判每行两端,统一用递推公式计算:右边界会真正越界崩溃,左边界在 Python 里会被负索引悄悄取到错误的值。本文用真实反例演示这两种失败模式,再给出正确写法和 5 种语言实现。
只返回杨辉三角的第 rowIndex 行,要求 O(k) 额外空间。一个容易踩的坑是原地更新数组时方向搞反了,从左往右更新会用到本轮已经被覆盖过的新值:本文用真实反例验证,再给出正确写法和 5 种语言实现。
给定三角形数组,求从顶部到底部的最小路径和。一个很直觉但错误的思路是每步贪心选数值较小的相邻结点:本文用真实反例证明贪心和最优解能差出近百倍,并用 2 万组随机测试验证近三分之一的三角形会让贪心给出错误答案,再给出正确的 DP 写法和 5 种语言实现。