查找 —— 平衡二叉树

一、定义

二叉排序树的时间复杂度为 O(n),平衡二叉排序树的时间复杂度为 O(logn)

平衡二叉树又称 AVL 树,是一种特殊的二叉排序树,拥有更高的查询效率。平衡二叉树或是一棵空树,或满足下列性质的一棵非空的二叉树T:

  1. T的左子树和右子树的深度之差的绝对值不超过1;
  2. T的左子树和右子树均为平衡二叉树。

二叉树T的结点平衡因子BF(Balance Factor)为左子树的深度减去右子树的深度,树种


二、算法思想

在建立平衡二叉树的过程中,每插入一个新的关键字都要进行检查,看是否新关键字的插入会使得原平衡二叉树失去平衡,即树中出现平衡因子绝对值大于1的结点。如果失去平衡则需要进行平衡调整。


三、平衡调整

  • 当失去平衡的最小子树被调整为平衡子树后,无需调整原有其它所有的不平衡子树,整个二叉排序树就会成为一棵平衡二叉树。

  • 最小不平衡子树: 以距离插入结点最近,且以平衡因子绝对值大于1的结点作为根的子树。

(1)LL型平衡旋转法

插入点是最小不平衡子树的左子树之左子树。

由于在A的左孩子B的左子树上插入结点F,使A的平衡因子由1增至2而失去平衡。故需进行一次顺时针旋转操作。即将A的左孩子B向右上旋转代替A作为根结点,A向右下旋转成为B的右子树的根结点。而原来B的右子树则变成A的左子树。
在这里插入图片描述

(2)RR型平衡旋转法

插入点是最小不平衡子树的右子树之右子树。

由于在A的右孩子C 的右子树上插入结点F,使A的平衡因子由-1减至-2而失去平衡。故需进行一次逆时针旋转操作。即将A的右孩子C向左上旋转代替A作为根结点,A向左下旋转成为C的左子树的根结点。而原来C的左子树则变成A的右子树。

在这里插入图片描述

(3)LR型平衡旋转法

插入点是最小不平衡子树的左子树之右子树。

由于在A的左孩子B的右子数上插入结点F,使A的平衡因子由1增至2而失去平衡。故需进行两次旋转操作(先逆时针,后顺时针)。

  1. 先将A结点的左孩子B的右子树的根结点D向左上旋转提升到B结点的位置
  2. 然后再把该D结点向右上旋转提升到A结点的位置。即先使之成为LL型,再按LL型处理。

在这里插入图片描述
其中,调整的中间状态如下(对应的步骤一:将A结点的左孩子B的右子树的根结点D向左上旋转提升到B结点的位置)
在这里插入图片描述

(4)RL型平衡旋转法

插入点是最小不平衡子树的右子树之左子树。

由于在A的右孩子C的左子树上插入结点F,使A的平衡因子由-1减至-2而失去平衡。故需进行两次旋转操作(先顺时针,后逆时针)。

  1. 先将A结点的右孩子C的左子树的根结点D向右上旋转提升到C结点的位置
  2. 然后再把该D结点向左上旋转提升到A结点的位置。即先使之成为RR型,再按RR型处理。

在这里插入图片描述

其中,调整的中间状态如下(对应的步骤一:将A结点的右孩子C的左子树的根结点D向右上旋转提升到C结点的位置)

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/starter_____/article/details/93875517
今日推荐