【数据结构】平衡树

平衡树
  • 平衡因子: 左子树与右子树的高度差

  • 平衡树:二叉树中每个结点的平衡度的绝对值都小于等于1
    在这里插入图片描述

  • 高度一定的平衡树可能具有的最多结点和最少结点(递推)

    在这里插入图片描述

    在这里插入图片描述

    平衡查找树和丰满查找树的查找效率接近

    查找树:中序有序

    平衡树:平衡因子绝对值不大于1

  • 插入

    插入:

    不考虑结点的平衡度,使用在查找树中插入新结点的算法, 把新结点k插入树中,同时置新结点平衡度 β ( k ) = 0 \beta(k)=0 β(k)=0

    平衡:

    调整平衡度,确定需要调整的范围——最小不平衡子树

    改组:

    改变以 k i k_i ki为根的子树的形态,使得新子树的高度和插入以前以 k i k_i ki为根的子树的高度相同,同时新子树是一棵平衡查找树

    改组方法:LL,LR,RR,RL

    1. LL:在结点A的左子树的左子树上插入新结点导致失去平衡
      在这里插入图片描述
      ​ 将A改为B右子树,B原来的右子树BR改为A的左 子树。

    2. LR型:在结点A的左子树的右子树上插入新结点失去平衡

      在这里插入图片描述

      首先将B改为C的左子树,而C原来的左子树CL改为B的右子树,然 后将A改为C的右子树,C原来的右子树CR改为A的左子树。(相当于对B先左旋转,
      再对A执行右旋转)

  • 删除

    先找到最底部不平衡的子树,将其恢复平衡。再根据情况判断 需不需要继续沿着子树向上恢复平衡。 为了找到最底部不平衡的子树,将删除操作迁移到最底部的子 树上进行(让被删除的结点v,最多有一个孩子。如果v有两个孩 子,则用它的中序的前一个结点代替它,然后删除它的中序的前一个结点)。

    1. 保证要删除的结点x,最多只有一个子结点。
    2. 删除结点x,x的parent将指向x的指针指向x的子结点(or to NULL,if no child)。从x的parent结点(记为p)起,向树根 方向不断检查,需要时进行调整。设置布尔变量shorten,初始
      为true,直到某次调整后树的高度不减小,则为false,停止。

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值