Skip to content

平衡搜索树

Balanced search tree

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

条目类型
定义

形式陈述

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

h=O(logn).

由于搜索、插入、删除都沿一条根到叶的路径进行,对数高度直接给出最坏 O(logn) 的搜索时间;插入与删除在修改后沿路径回溯,通过旋转、重新着色或局部重构恢复不变量,典型结构的更新同样是最坏 O(logn)。两个代表:AVL 树要求每个节点左右子树高度差至多 1,可推出 h1.45log2(n+2) 量级;红黑树要求红节点的孩子皆为黑且所有根到空叶路径的黑节点数相等,可推出 h2log2(n+1)。旋转是核心修复原语:它在保持中序序列不变的前提下改变局部形状,因而不破坏搜索序。

直觉

普通二叉搜索树的形状由插入顺序决定,有序到来的键会把它拉成一条链,搜索退化为线性扫描。平衡不变量的作用是让“每次比较都排除大约固定比例的候选”始终成立——树高对数正是这句话的形状化表述。设计上的巧妙在于不变量是局部的:违反只发生在更新路径附近,用常数个局部旋转或染色即可修复,无须全局重建;而“局部约束蕴含全局对数高度”正是每种平衡方案各自需要证明的定理。可以把不变量想成一根张紧的弓弦:每次更新轻微拨动,修复动作立即把形变限制在允许范围内。

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

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

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

推论与应用

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

本页的中心是“结构不变量怎样保证高度”,而非罗列全部树族。伸展树不保持逐时对数高度,只给操作序列上的摊还 O(logn)Treap用随机优先级得到期望对数高度;B 树面向块传输,以多路节点占用率换取 O(logBn) 级 I/O。保留旧版本并共享未改子树还属于持久化数据结构问题,需要另计复制与空间。这些结构共享“有序搜索”目标,却不能把保证类型和成本模型互换。

参考资料
  • 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。
关系图谱13 个相邻概念 · 4 类关系

拖动节点调整位置。

显示关系

显示:依赖

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

上位 / 更一般

暂未标注直接上位概念。

下位 / 直接特例

类型化关系

被这些条目使用

并列辨析