二叉排序树删除节点_8.3.2 平衡二叉排序树

40a93b13ead84b99852248650d0da1bd.png

返回目录:

Chilan Yu:《数据结构》目录链接​zhuanlan.zhihu.com
5cab6254d3ec76697c7929dcb40c80b7.png

平衡二叉排序树又称为AVL树。一棵平衡二叉排序树或者是空树,或者是具有下列性质的二叉排序树:

  • (1)左子树与右子树高度之差的绝对值小于等于1;
  • (2)左子树和右子树也是平衡二叉排序树。

平衡因子:结点的左子树深度与右子树深度之差。

由性质可知,一棵平衡二叉树的所有结点的平衡因子只能是-1、0或1。

下面通过实例来说明失衡情况以及相应的调整方法:

  1. 在(a)图A的左子树的左子树上插入15后,导致失衡,如(b)图。为恢复平衡并保证二叉排序树的特性,可将A改为B的右子树,B原来的右子树改为A的左子树,图©,即以B为轴,对A做一次顺时针旋转

a4349f7ce5c8f2cc9a005a656ade5b00.png

2. 在(a)图A的右子树B的右子树上插入70后,导致失衡,如(b)图。为恢复平衡并保证二叉排序树的特性,可将A改为B的左子树,B原来的左子树改为A的右子树,图(c),即以B为轴,对A做一次逆时针旋转

66f980202561cc41254099f4f1d80bdb.png

3. 在(a)图A的左子树B的右子树上插入45后,导致失衡,如(b)图。为恢复平衡并保证二叉排序树的特性,可首先将B改为C的左子树,而C原来的左子树改为B的右子树;然后将A改为C的右子树,C原来的右子树改为A的左子树,即对B做了一次逆时针旋转,对A做一次顺时针旋转

eb481f64d3443fba1db13bbb19e7d761.png

4. 在(a)图A的右子树B的左子树上插入55后,导致失衡,如(b)图。为恢复平衡并保证二叉排序树的特性,可首先将B改为C的右子树,而C原来的右子树改为B的左子树;然后将A改为C的左子树,C原来的左子树改为A的右子树,即对B做了一次顺时针旋转,对A做一次逆时针旋转

9beb069e15945d5605af48e01f357b2a.png

综上所述,失衡类型及相应的调整方法可归纳为以下四种

(1)LL型(以B轴,对A做了一次顺时针旋转)

afe50f3e88cc5875bbc14d0be252654a.png

(2)LR型(对B做了一次逆时针旋转,对A做了一次顺时针旋转)

833401051874179fb0488f0fa5428640.png

(3)RR型(以B为轴,对A做了一次逆时针旋转)

4aa098b0109b64b4f7a3c7f2acf9d0da.png

(4)RL型(对B做了一次顺时针旋转,对A做了一次逆时针旋转 )

6d290b4097a34ae78c31fa67e07b9683.png

综上所述,在一个平衡二叉排序树上插入一个新结点S时,主要包括以下三步:

  • (1)查找应插位置,同时记录离插入位置最近的可能失衡结点A(A的平衡因子不等于0)。
  • (2)插入新结点S,并修改从A到S路径上各结点的平衡因子。
  • (3)根据A、B的平衡因子,判断是否失衡以及失衡类型,并做相应处理。

返回目录:

Chilan Yu:《数据结构》目录链接​zhuanlan.zhihu.com
5cab6254d3ec76697c7929dcb40c80b7.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值