平衡与等价
看完你能亲手推导平衡条件并解释等价变换的边界
按 空格/→ 演示下一步
全部页面点击任意一页,跳回舞台从这页播放
平衡与等价
看完你能亲手推导平衡条件并解释等价变换的边界
BST的基本查找效率
上一节我们看到,平衡让 BST 退化为「逐层折半」。顺着这条线索,本节把它说透:为什么平衡的树每次比较都能砍掉一半候选,从而达到 O(log n)?
你说一个数,我答大/小,每次把候选范围砍半
有序插入:退化成链表
从根 1 出发,顺右侧箭头依次读 2→3→4→5;所有左箭头都指向空,结构等同于单链表。
退化的代价:查找变成O(n)
上一页已经看到,按有序序列插入,BST 会一路向右退化成一条单链。这条「长得像链表」的树,搜索代价到底是多少?和真正的链表拉出来直接比一比。
BST 像查字典每次砍一半,退化后只能从首页一页页翻
为什么关心平均情况
上一页说最坏能退化成 O(n),但那是刻意按顺序插入的结果。真实工程里数据往往是乱的,罕有人专门构造最坏情况。我们真正关心的是「典型情况下到底有多快」。
「可能排最久」是上界,「通常要多久」才是日常体验
随机插入的高度期望
沿推导链读:随机顺序→根均分→子树减半→递推求解。
最好vs平均vs最坏
三种插入顺序,决定 BST 是高效还是崩溃——它们之间差的不只是速度,而是量级。
- 树高约 log₂n,层数极少
- 查找、插入、删除都是 O(log n)
- 平衡插入或随机插入时出现
- 树高退化为 n,变成链表形态
- 查找、插入、删除都变成 O(n)
- 有序或逆序插入时触发
完全二叉树的形态
前面看到随机插入能让高度趋近期望值,但「运气」不可控。有没有一种树的形态是结构上就保证平衡的?完全二叉树就是其中最经典的一种。
前排满座 = 中间层满节点;最后排从左坐起 = 最后一层左对齐连续填
完全二叉树的性质
从完全二叉树形态看高度h与节点数n的精确数量关系
平衡因子:理想值为0
完全二叉树是教科书里最理想的形态,但真实插入顺序千变万化,没有两棵树长得一样。我们需要一个数字来量化「这棵树离理想有多远」——左右子树的高度差,就是平衡因子。
砝码偏重对应子树偏高,差为零就水平
理想平衡的查找效率
高度h对应O(log₂(n+1))复杂度
理想平衡的维护代价
上页说理想平衡带来 O(log n) 的查找效率。但插入一个新节点后,理想平衡往往就被打破。修复需要多大代价?这就是这页要回答的问题。
完美等高要求每加一个碗都重整整摞;允许小幅偏差只微调顶部
适度平衡的核心思想
上一页我们看到,追求完美平衡的维护代价不小——每次插入都可能引发大规模调整。能不能允许一点点偏差,换来维护上的轻松?
衣柜看着整齐就好,不必每件间距完全一样
AVL树的平衡标准
从任一节点算BF,按|BF|大小分流,标出合法边界。
红黑树的平衡标准
自上而下读:5条规则 → 路径约束 → 高度上界 → 维护代价的因果链。
严格平衡vs宽松平衡
AVL要求每个节点左右严格平衡,红黑树放宽到路径长度比——两种思路直接决定增删查的取舍。
- 标准:左右子树高度差≤1
- 查找:更贴近完全二叉树
- 代价:增删常需多次旋转
- 标准:最长路径≤2倍最短
- 查找:O(log n),略逊AVL
- 代价:增删旋转少,≤3次
什么是「等价」的BST
一组数字按不同顺序插入,会得到形态各异的BST——有的高瘦像竹竿,有的矮胖像蘑菇。它们是否等价?判别只看一件事,和形态毫无关系。
花色数字全相同就是同一副牌,洗牌顺序不同不影响这副牌本身
等价BST的例子
同一组数据的不同树形态
为什么关注等价性
上页我们看到,多棵形态各异的BST可以拥有相同的中序序列——对外部世界'长得一样'。这并非偶然,而是平衡算法能存在的根基——等价性给了我们'不改数据、只调结构'的自由。
字母顺序=中序序列,书在几层架=树形,换层架不破坏字母顺序
旋转的本质
前面看到,等价的BST能长成截然不同的形态——有的瘦高像链条,有的矮胖较平衡。从一种形态变成另一种,靠的不是整体重建,而是一种局部变形——这就是「旋转」。
菜品绕中心转动,相对顺序不变;节点绕支点重排,中序不变
右旋的步骤分解
右旋是BST维持平衡的基本动作,把X绕左子L顺时针转一圈,整个过程分四步,缺一不可。
左旋的步骤分解
一次左旋让过深的右子树变浅,支点是失衡节点的右孩子
旋转保持等价性
原树经右旋变新树,节点位置改变但中序遍历相同 → 两棵BST等价
旋转改变树高
沿流程看一棵左斜树如何通过右旋把高度压低一层。
等价变换的应用场景
两种自平衡树共用BST等价变换,但触发条件和策略选择截然不同
平衡与等价的统一视角
前面看到,插入顺序不同可能得到形状不同、甚至退化的 BST;但只要中序遍历相同,它们保存的键值序列就相同。接下来把这两件事放在一起看。
文件内容与顺序不变,只调整摆放;平衡就是让同一批文件更易查找。
核心概念自测
下列关于BST旋转的描述,哪一项最准确?
本章要点回顾
- ✓平衡是查找与维护之间的取舍
- ✓等价BST形状不唯一,中序相同即可
- ✓旋转是连接平衡与等价的桥梁
- ✓严格平衡查找快,宽松平衡维护省
- ✓适度平衡比理想平衡更实用
课后思考
先合上笔记自己想五分钟,再对照参考答案——好的思考题不在于答得'对',在于把它想透。
参考答案回到'维护代价'那张页:严格平衡每插入一次可能 O(n) 次旋转,红黑树只要 O(1) 次。完美平衡是'查询最优、维护最差',工程正解是适度平衡——在'够用'与'不过度'之间取舍。
参考答案关键在物理:磁盘 I/O 远比 CPU 慢——树每矮一层 = 少一次磁盘读。所以磁盘索引宁可放宽平衡标准,也要保证'修改只触发局部调整',避免大规模写盘。算法设计必须考虑介质特性。
参考答案推论方向:① 任意 BST 都能通过旋转变成完全二叉树(但代价 O(n) 次旋转);② 局部旋转可做范围修改、平衡修复;③ 把不变性用到极限,常常能挖出意想不到的应用场景。