第12章 二叉搜索树 — 章节汇总

章节概览

本章系统介绍了二叉搜索树(Binary Search Tree, BST)——一种支持动态集合操作的序数据结构。BST利用二叉树的层次结构,使得搜索、插入、删除等字典操作在 时间内完成( 为树高)。与散列表不同,BST天然支持有序操作(最小值、最大值、前驱、后继、范围查询),但最坏情况下可能退化为 。本章为第13章红黑树(保证 最坏情况)奠定基础。


12.1 什么是二叉搜索树

小节核心主题关键结论
12.1 什么是二叉搜索树BST定义、BST性质、中序遍历中序遍历输出有序序列

核心思路:BST是一种二叉树,满足BST性质:对任意节点 ,左子树中所有节点的关键字 ,右子树中所有节点的关键字 。这是一个对整个子树的递归约束,而非仅对直接孩子的约束。

核心定理

  • 定理12.1:若 个节点的BST的根,则 INORDER-TREE-WALK(x) 输出关键字递增序列(数学归纳法证明)

12.2 查询二叉搜索树

小节核心主题关键结论
12.2 查询二叉搜索树搜索、最小/最大值、前驱/后继所有操作 时间

核心思路:BST的查询操作利用BST性质进行”二分导航”——每一步根据比较结果选择进入左子树或右子树,将搜索空间减半。

核心操作

  • TREE-SEARCH / ITERATIVE-TREE-SEARCH:搜索关键字为 的节点
  • TREE-MINIMUM / TREE-MAXIMUM:沿左/右边界下降到底
  • TREE-SUCCESSOR / TREE-PREDECESSOR:两种情况——有右子树时取右子树最小值;无右子树时沿父指针上溯直到”左拐”

12.3 插入和删除

小节核心主题关键结论
12.3 插入和删除TREE-INSERT、TRANSPLANT、TREE-DELETE所有操作 时间

核心思路

  • 插入:从根出发沿BST性质找到合适的叶位置,将新节点挂在父节点下
  • 删除:三种情况——无子节点(直接删除)、单子节点(用子节点替换)、双子节点(用后继替换,通过 TRANSPLANT 辅助操作实现)

关键设计决策:CLRS第4版使用 TRANSPLANT 方法实际替换节点 (而非旧版的”复制后继key到 “方法),保证外部指针不会失效(stale pointers问题)。


本章核心知识点

BST操作复杂度汇总

操作时间复杂度说明
搜索 (TREE-SEARCH)递归或迭代
最小值 (TREE-MINIMUM)沿左边界下降
最大值 (TREE-MAXIMUM)沿右边界下降
前驱 (TREE-PREDECESSOR)两种情况
后继 (TREE-SUCCESSOR)两种情况
插入 (TREE-INSERT)找叶位置+挂载
删除 (TREE-DELETE)三种情况
中序遍历输出有序序列

BST vs 散列表 vs 二叉堆 对比

特性二叉搜索树散列表二叉堆
搜索,最坏 期望(不支持)
插入 期望
删除 期望
最小/最大不支持
前驱/后继不支持不支持
有序遍历(中序)不支持不支持
范围查询不支持不支持
最坏保证无(退化时 无(最坏
有序性天然有序无序部分有序(堆性质)

BST删除三种情况

情况条件操作复杂度
无子节点TRANSPLANT(T, z, NIL)
单子节点仅有一个子节点非NILTRANSPLANT(T, z, z.left)TRANSPLANT(T, z, z.right)
双子节点两个子节点均非NIL;若 TRANSPLANT(T, y, y.right);再 TRANSPLANT(T, z, y) 并重接子树

与前序章节的知识关联

前序章节关联方式
第11章 散列表散列 期望 vs BST 的设计取舍;散列不支持有序操作,BST天然支持
第10章 基本数据结构10.3节有根树的表示(p/left/right 指针)是BST节点结构的基础
第6章 堆排序二叉堆 vs 二叉搜索树:同为二叉树但性质不同(堆:父≥子;BST:左<根<右)
第7章 快速排序随机构建BST的期望路径长度与快速排序的比较次数相同(问题12-3)
第5章 概率分析随机BST的期望高度分析依赖概率分析技术

学习路线

第12章学习路径:
  12.1 什么是二叉搜索树(BST定义→BST性质→中序遍历→定理12.1)
    → 12.2 查询二叉搜索树(搜索→最小/最大→前驱/后继→循环不变式证明)
      → 12.3 插入和删除(TREE-INSERT→TRANSPLANT→TREE-DELETE三种情况)

学习建议

本章是数据结构部分的基石章节。12.1 重点理解BST性质的”子树全局约束”(不是仅约束直接孩子)。12.2 重点掌握 TREE-SUCCESSOR 的两种情况分析和 ITERATIVE-TREE-SEARCH 的循环不变式证明。12.3 是本章最难的部分,TRANSPLANT 辅助操作和删除的三种情况(特别是情况3a和3b的区别)需要反复推敲。学完本章后,对比第11章散列表理解两者的设计取舍,同时为第13章红黑树(解决BST退化问题)做好准备。

二叉搜索树