Skip to content

模型Model

平衡搜索树

施工中 · 内容逐步修订

Balanced search tree

以结构不变量保证对数高度和最坏对数搜索时间的二叉搜索树族。

形式陈述 ​

平衡搜索树(本页聚焦其二叉形态)是在二叉搜索树的有序不变量之上,再维护一条结构不变量的树族。用渐近记号表述,该不变量保证含 n 个节点时树高

h=O(log⁡n).

在常数时间比较与指针操作模型中,对数高度直接给出最坏 O(log⁡n) 的搜索时间。插入和删除还需恢复结构不变量;高度界本身不限制修复要做多少工作。AVL 树和红黑树通过沿祖先路径检查并作局部旋转、重新着色,使整次更新也保持最坏 O(log⁡n)。两个代表:AVL 树要求每个节点左右子树高度差至多 1,可推出 h≤1.45log2⁡(n+2) 量级;红黑树要求红节点的孩子皆为黑且所有根到空叶路径的黑节点数相等,可推出 h≤2log2⁡(n+1)。旋转是核心修复原语:它在保持中序序列不变的前提下改变局部形状,因而不破坏搜索序。

直觉

普通二叉搜索树的形状由插入顺序决定,有序到来的键会把它拉成一条链。平衡约束首先保证的是整条搜索路径足够短,并不要求每次比较都排除固定比例的节点:高度相近的两棵子树,节点数仍可能相差很大。

以 AVL 树为例,令 N(h) 为高度 h 的合法树所需的最少节点数。高度为 h 的根至少有高度 h−1 和 h−2 的两棵子树,所以 N(h)=1+N(h−1)+N(h−2),其中 N(−1)=0,N(0)=1。这个 Fibonacci 型递推随高度指数增长,反过来便得到高度随节点数对数增长。证明用的是最少节点数,而非每个分叉恰好平分。

插入或删除只改变一条祖先路径上的高度或颜色信息,修复因而沿这条路径推进。一次旋转只涉及常数个链接,但整次更新可能要向上检查 O(log⁡n) 个节点;AVL 删除可在多层旋转,红黑树染色也可能向根传播,不能笼统说所有修复都只需常数步。

失衡子树与单旋修复
例子与边界

向空树依次插入 1,2,…,n:普通 BST 得到高度 n−1 的右链;AVL 树则沿途不断触发旋转,例如插入 1 至 7 后得到以 4 为根、高度为 2 的完全平衡树。这一对照说明平衡树的最坏保证不依赖输入顺序的任何随机性。

前三次插入已能看见修复机制:1 的右孩子为 2,2 的右孩子为 3,根的两侧高度相差 2。以 1 为轴左旋后,2 成为根、1 成为左孩子、3 保持右孩子;中序仍为 1,2,3。一般左旋还须把原右孩子的左子树接到旧根的右侧,因为其中所有键都位于这两个根键之间。这个中间子树的转移正是旋转保持搜索序的原因。

“平衡”一词必须点明保证类型。AVL 与红黑树给出最坏情形界;随机顺序插入下普通 BST 的期望高度是 O(log⁡n),却不是最坏保证;伸展树单次操作可达 Θ(n),提供的是摊还 O(log⁡n)。面向外存块传输的B 树和B+ 树采用多路节点与占用率不变量,不是本页二叉旋转模型的“高叉变体”。节点若带父指针、子树大小等增强字段,每次旋转都必须同步更新,否则相关查询会失效。

推论与应用

平衡搜索树实现有序字典,支持查找、更新、前驱后继与范围查询。扫描线还可用它维护与当前横截线相交对象的动态次序,使“找几何相邻对象”落到前驱、后继与局部更新。若节点再维护子树摘要,旋转时必须同步重算;这套通用方法由搜索树增强说明,维护子树大小的具体接口则形成顺序统计树。增强字段不自动继承复杂度,只有字段能由孩子在 O(1) 时间合并时,更新才继续保持相应的最坏 O(log⁡n)。

若需保留旧版本,可用路径复制共享未改子树,但这属于持久化数据结构的额外设计。树高界只控制一次更新涉及多少层,还须检查旋转、父指针与共享节点能否兼容,并分别计算复制节点数和总空间。

参考资料
  • Pat Morin,Open Data Structures,2013,Chapter 9: Red-Black Trees:平衡不变量与对数高度。

  • Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein, Introduction to Algorithms, 4th ed., MIT Press, 2022,Parts I–VI。

  • Robert E. Tarjan, Data Structures and Network Algorithms, SIAM, 1983,Chs. 1–6。

关系图谱17 个相邻概念 · 4 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
分类位置

上位 / 更一般

下位 / 直接特例

类型化关系