平衡二叉树AVL

文章目录

  • 一、 相关概念
      • 1.1 AVL定义
      • 1.2 平衡因子
      • 1.3 AVL的作用
  • 二、 失衡调整
      • 2.1 LL型
      • 2.2 RR型
      • 2.3 LR型
      • 2.4 RL型

一、 相关概念

1.1 AVL定义

平衡二叉树又称为AVL树,它或者是颗空树,或者是具有下列性质的二叉排序树

  • 左右两个子树的高度差值不超过1;
  • 它的左右子树也是一颗平衡二叉树;

1.2 平衡因子

某节点的左子树与右子树的高度差即为该节点的平衡因子BF。

按照定义我们可以得到,AVL上所有结点的平衡因子只可能是 -1,0 或 1。
下面这张图中标出了每一个节点的平衡因子,而根节点的平衡因子为-2,所以显然这不是一颗平衡二叉树。
平衡二叉树AVL_第1张图片

1.3 AVL的作用

为了解决搜索二叉树在极端的情况下退化成单支树,引入了平衡二叉树,使得查找的效率得到改善;
平衡二叉树AVL_第2张图片

二、 失衡调整

在平衡二叉树中插入一个新结点后,从该结点起向上寻找第一个不平衡的结点,以确定该树是否失衡。若找到,则以该结点为根的子树称为最小失衡子树

2.1 LL型

LL型指的是在最小失衡子树的左孩子的左子树上插入了新的结点。

LL型指的是在最小失衡子树左孩子的左子树上插入了新的结点。失衡调整如下图,先找到最小失衡子树的根8,以其左孩子结点6为轴,对不平衡结点8进行右旋操作。右旋是指让6顶替8的位置成为原本最小不平衡子树的新的根节点,并置8为6的右孩子,如果6存在右子树7,则置7为8的左子树。

平衡二叉树AVL_第3张图片

2.2 RR型

RR型指的是在最小失衡子树的右孩子的右子树上插入了新的结点,与LL型对称。

失衡调整如下图,先找到最小失衡子树的根6,以其右孩子结点8为轴,对不平衡结点6进行左旋操作。左旋是指让8顶替6的位置成为原本最小不平衡子树的新的根节点,并置6为8的左孩子,如果8存在左子树7,则置7为6的右子树。
平衡二叉树AVL_第4张图片

2.3 LR型

LR型指的是最小失衡子树的左孩子的右子树上插入了新的结点。

LR型要进行两步操作,与名字对应,先左旋再右旋。
失衡调整如下图,首先找到以10为根的最小失衡子树,以该子树的左孩子结点4为轴,对右子树结点8进行左旋操作,使之变为LL型。再以8为轴,对不平衡结点10进行右旋操作

平衡二叉树AVL_第5张图片

2.4 RL型

RL型指的是最小失衡子树的右孩子的左子树上插入了新的结点。

RL型与LR型对称,也要进行两步操作,先右旋再左旋。
失衡调整如下图,首先找到以2为根的最小失衡子树,以该子树的右孩子结点10为轴,对左子树结点8进行右旋操作,使之变为RR型。再以8为轴,对不平衡结点2进行左旋操作

平衡二叉树AVL_第6张图片

你可能感兴趣的:(数据结构,数据结构,java,二叉树)