跳到主要内容
约 2 分钟1 张卡

二叉搜索树

二叉搜索树(BST)利用键的大小关系剪去不可能的子树,用于有序查找与范围查询。本文假设键互异;重复键必须另行约定计数或存放方式。

1. 面试核心​

先记住这几条,再读正文
  • 每个节点左子树的所有键更小,右子树的所有键更大。
  • 查找、插入和删除通常为 O(h),普通 BST 最坏可退化为 O(n)。
  • 中序遍历得到升序序列,平衡搜索树通过额外规则控制树高。

2. 查找时排除一棵子树​

从根查找 target:相等就命中;target 更小时走左孩子,否则走右孩子。走到空节点表示不存在。每一步只沿一条路径,成本由树高决定。

验证 BST 时,不能只比较一个节点与直接孩子。例如根 10 的左孩子是 5,5 的右孩子是 12,局部父子关系正确,但 12 违反了根的左子树上界。递归验证必须把祖先确定的上下界向下传递。

3. 插入与删除​

插入沿查找路径找到空位置。若依次插入 1,2,3,4,会形成向右的链,说明普通 BST 不保证 O(log n)。

删除分三种情况:叶子直接移除;只有一个孩子时用孩子接替;有两个孩子时,可用右子树最小键作为后继替代当前键,再删除原后继节点。后继没有左孩子,后一次删除因此更简单。若外部持有节点引用,还应明确替换的是键还是节点身份。

4. 使用边界​

有序遍历、前驱后继和范围查找适合搜索树。只要等值查询时,可以比较哈希表的平均成本与顺序需求。

AVL 树、红黑树通过旋转及平衡规则维持 O(log n) 高度,但会增加维护成本。数据库的磁盘索引通常需要减少页访问,进一步使用B+ 树,不能直接把内存 BST 的节点结构搬到磁盘上。

5 · 面试题卡片​

先想答案,再翻面题目来自公开面经。点任意一张进入翻卡,可左右切换,看完回到这里。
逐张翻看 1 张 →

5.1 为什么验证二叉搜索树不能只比较每个节点和它的直接孩子?​

出现公司:暂无已核验的公开来源(本站自测)

考察重点:整棵子树的键范围、祖先约束的传递与重复键策略。

相关内容:面试核心、查找时排除一棵子树、使用边界。

参考回答

BST 要求整棵左子树都小于当前键、整棵右子树都大于当前键,局部检查遗漏祖先约束。验证时传入允许的上下界,左孩子收紧上界、右孩子收紧下界;也可以中序遍历检查严格递增。重复键策略必须先约定,边界值应避免靠加一或减一制造溢出。

6. 参考资料​