平衡二叉树的调整

全文插图及部分文字源于微信公众号:五分钟算法

1 最小失衡树的概念

最小失衡子树:在新插入的节点向上查找,以第一个平衡因子的绝对值超过 1 的节点为根的子树称为最小不平衡子树。也就是说,一棵失衡的树,是有可能有多棵子树同时失衡的。而这个时候,我们只要调整最小的不平衡子树,就能够将不平衡的树调整为平衡的树。

图片

在动图中,以节点 66 为根节点的那颗树就称为 最小失衡子树

2 对节点的两种操作(是对节点的操作,不是对树)

2.1 左旋

左旋步骤如下(以下图为例):

图片

  1. 当前操作节点是66 (66这个节点是最小失衡树的根节点)
  2. 断开该节点的孩子连接线 (此时变成了两棵树,设以66为根节点的树为原根树,以77为根节点的树为新根树)
  3. 判断新根树的根节点子树是否为
    • ,直接把原根树作为新根树子树。
    • 不空:
      • 新根树的根节点的左子树独立出来,设其名为新原独树
      • 新原独树作为原根树右子树
      • 原根树作为新根树左子树

动态步骤如下:

图片

2.2 右旋

左旋步骤如下(以下图为例):

  1. 当前操作节点是A (A这个节点是最小失衡树的根节点)
  2. 断开该节点的根节点的孩子连接线 (此时变成了两棵树,设以A为根节点的树为原根树,以B为根节点的树为新根树)
  3. 判断新根树的根节点子树是否为
    • ,直接把原根树作为新根树子树。
    • 不空:
      • 新根树的根节点的右子树独立出来,设其名为新原独树
      • 新原独树作为原根树左子树
      • 原根树作为新根树右子树

动态步骤如下:

图片

3 平衡二叉树四种插入节点的方式

3.1 LL

对最小失衡树的根节点实行一次右旋即可

3.2 RR

对最小失衡树的根节点实行一次左旋即可

3.3 LR

3.3

步骤如下:

  1. 对最小失衡树的根节点的左孩子(节点B)实行一次左旋,得到下图,

图片

  1. 再对最小失衡树的根节点(节点A)(!!!当前的最小失衡树概念基于最初的树,不是已经经过左旋的树!!!)实行一次右旋,成功恢复平衡。

图片

3.4 RL

图片

步骤如下:

  1. 对最小失衡树的根节点的左孩子(节点C)实行一次右旋,得到下图

图片

  1. 再对最小失衡树的根节点((节点A)(!!!当前的最小失衡树概念基于最初的树,不是已经经过右旋的树!!!))实行一次左旋,成功恢复平衡。

图片

  • 9
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

「已注销」

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值