解析平衡二叉树(AVL树)
一。平衡二叉树的定义
平衡二叉树也叫AVL树,它或者是一颗空树,或者具有以下性质的二叉排序树:它的左子树和左子树的高度之差(平衡因子)的绝对值不超过1,且它的左子树和右子树都是一颗平衡二叉树。
二。平衡二叉树的结构
如基本概念所树,它具有一个左子树和一个左子树,且对于任意一个子树而言,左子树和右子树高度只差不超过1.
三。 平衡因子
我们将二叉树上结点的左子树深度减去右子树深度的值称为平衡因子BF(Balance Factor),所以平衡二叉树每一个结点的平衡因子只能是-1,0,1,只要二叉树上有一个结点的平衡因子的绝对值大于1,则这棵二叉树就不是平衡二叉树。
如何将不平衡的二叉树平衡:
主要有四种调整方式:
LL型:在左子树的左孩子上插入元素;(右旋)
RR型:在右子树的右孩子上插入元素;(左旋)
LR型:在左子树的右孩子上插入元素;(先左旋再右旋)
RL型:在右子树的左孩子上插入元素;(先右旋再左旋)
LL型
**图1:*
图2:
图3:
如上图,LL型也为左左型,在被破坏节点的左边的左边插入而导致失衡,则为LL型,注意上面3个图,黑色的线表示它型号判断的路径,所有型号的判断只从被破坏节点开始判断两次,即不管你第三次新插入节点的位置在左还是在右,如图2和图3,一个左一个右,但是都为LL型,因为只判断两次。
LL型解决方案:以被破坏节点为基础进行右旋
RR型
图1:
图2:
图3:
如上图,RR型也为右右型,在被破坏节点的右边的右边插入而导致失衡,则为RR型,注意上面3个图,黑色的线表示它型号判断的路径,与LL型相反。
LL型解决方案:以被破坏节点为基础进行左旋
RL型
如图:
如上图,RL型也为右左型,在被破坏节点的右边的左边插入而导致失衡,则为RL型,注意上图,黑色的线表示它型号判断的路径。
RL型解决方案:以被破坏节点R(右)节点为基础先进行一次R(右)旋,再以被破坏节点为基础进行左旋。
上图调整:
先以25为基础进行一次右旋。
再以20为基础进行一次右旋,可以看出经过两次旋转后,该树已经平衡。
LR型
如图:
如上图,LR型也为左右型,在被破坏节点的左边的右边插入而导致失衡,则为LR型,注意上图,黑色的线表示它型号判断的路径。
LR型解决方案:以被破坏节点L(左)节点为基础先进行一次L(左)旋,再以被破坏节点为基础进行右旋。
上图调整:
先以20为基础进行一次左旋。
再以25为基础进行一次右旋,可以看出经过两次旋转后,该树已经平衡。
以上是我的全部理解 请大家多多指教!!!