AVL树是自平衡二叉搜索树,核心要求任意节点平衡因子BF=左子树高度-右子树高度,满足
;插入节点触发失衡时,通过旋转调整恢复平衡,全程严格遵守二叉搜索树左小右大规则。
一、前置基础:插入后初始结构与数值规则
在4的右子节点位置插入4.5,符合
,为标准合法插入位置。
插入完成后原始树形(括号为节点高度):
3(4)
/ \
2(1) 5(3)
/ \
4(2)6(1)
\
4.5(1)
数值排序:
- BST规则:左子树所有值<根节点<右子树所有值
- AVL平衡规则:所有节点平衡因子绝对值不能大于1
二、失衡判定与旋转类型确定
从新节点4.5向上回溯,依次计算高度与平衡因子:
- 节点4.5:高度1,BF=0,无失衡
- 节点4:左高0,右高1,高度2,BF=-1,无失衡
- 节点6:高度1,BF=0,无失衡
- 节点5:左高2,右高1,高度3,BF=1,无失衡
- 节点2:高度1,BF=0,无失衡
- 节点3:左高1,右高3,高度4,
,首个失衡节点
旋转类型判定
- 失衡节点3的BF=-2,代表右子树过高
- 失衡节点右孩子为5,5的BF=1,代表右子节点的左子树偏高
- 形成右-左折线结构,判定为RL型失衡
- 固定矫正规则:先右旋失衡节点的右子节点,再左旋顶层失衡节点
三、分步旋转操作
第一步:右旋右子节点5(RL转RR直线结构)
旋转目的:把5、4、4.5的折线结构拉直,转化为右右平衡结构,为左旋做铺垫。
- 将4的左空分支挂载至5的左孩子位置
- 把5作为4的右孩子,完成父子节点调换
- 更新节点高度,替换原位置接入根节点3右侧
右旋5后中间树形:
3(4)
/ \
2(1) 4(2)
\
5(2)
/ \
4.5(1)6(1)
第二步:左旋顶层失衡节点3(整体恢复平衡)
旋转目的:降低右侧子树整体高度,完成整棵树平衡矫正。
- 将4的左空分支挂载至3的右孩子位置
- 把3作为4的左孩子,调换顶层父子关系
- 重新更新所有节点高度,完成最终定型
左旋3后最终平衡树形:
4(3)
/ \
3(2) 5(2)
/ / \
2(1) 4.5(1)6(1)
四、结果双重校验
1. 二叉搜索树规则校验
- 2<3<4,4.5<5<6,所有节点左小右大,排布完全合规
- 所有子树区间划分清晰,无数值顺序错乱
2. AVL平衡因子校验
- 叶子节点2、4.5、6:BF均为0
- 节点3:左高1,右高0,BF=1
- 节点5:左高1,右高1,BF=0
- 根节点4:左右子树高度均为2,BF=0
所有节点
,树完全平衡,无需再次旋转。
五、整体总结
本次为标准RL型AVL失衡矫正,核心流程固定不变:
右左失衡优先右旋右侧子节点拉直折线,再左旋顶层失衡节点收拢高度。
全程严格遵循BST数值规则与AVL平衡规则,插入位置规范、旋转逻辑标准,最终树形结构稳定合法。
四类旋转速记
- LL左左:右旋失衡节点
- RR右右:左旋失衡节点
- LR左右:先左旋左子节点,再右旋失衡节点
- RL右左:先右旋右子节点,再左旋失衡节点

2591

被折叠的 条评论
为什么被折叠?



