树形结构的查找(平衡二叉树--插入时调整)

一、平衡二叉树的定义

1、二叉树高度定义

空二叉树高度为0,仅含1个根节点高度为1;二叉树中所有叶子节点的最大路径长度,即根节点到叶子节点的最大长度为二叉树高度。

2、平衡二叉树定义

任一节点的左右子树的高度相差不超过1的二叉树为平衡二叉树。即对任一节点,设左子树高度L,右子树高度H,则|L-H|<=1

3、平衡二叉排序树AVL

既是平衡二叉树,又是二叉排序树的二叉树,简称平衡二叉树,即一般所指的平衡二叉树是平衡二叉排序树。

AVL树递归定义:

平衡二叉树或是一个空的二叉排序树,或满足:

(1)根节点的左子树和右子树高度差最多为1

(2)根节点的左子树和右子树也是平衡二叉树

4、节点平衡因子定义

左子树高度减去右子树高度。平衡二叉树的每个节点的平衡因子只能是-1、0、1

5、最小不平衡子树

指在平衡二叉树的构造过程中,当插入一个节点而导致原平衡变为不平衡时,距离该插入节点最近的、且平衡因子的绝对值大于1的节点为根的子树。

二、平衡二叉树的构造

在构造二叉排序树过程中,每插入一个节点时,检查是否因插入而破坏了树的平衡性,若破坏了,则找出最小不平衡子树。保持二叉排序树特性前提下,调整最小不平衡子树进行“旋转”,使之成为新的平衡树。

三、平衡二叉树的调整

设最小不平衡子树根节点为A,

(1)LL型调整(向右旋转)

在最小不平衡子树根节点A的左孩子的左子树上插入一个节点导致不平衡。

在A的左孩子B的左子树上插入一个节点。插入后B点的左子树的平衡因子变为1,A节点的平衡因子变为了2。这样可以看出来以A为根节点的子树是最小不平衡子树。调整时,将A的左孩子B向右旋转代替A称为原来不平衡子树的根节点,将A的节点右下旋转成为B的右子树的根节点,而B的原右子树变为A的左子树(以A为根向右的顺时针旋转)。详细过程如下图:

                                          《树形结构的查找(平衡二叉树--插入时调整)》

(2)RR型调整(向左旋转)

由于在最小不平衡子树根节点A的右孩子的右子树上插入一个节点,使A失去平衡。

在A节点的右孩子B的右子树上插入节点,使得A节点的平衡因子由-1变为-2而引起的不平衡所进行的调整操作(以A为根向左的逆时针旋转)。

调整过程如图:

《树形结构的查找(平衡二叉树--插入时调整)》

(3)LR型调整

由于在最小不平衡子树根节点A的左孩子的右子树上插入一个节点导致A不平衡。

在A节点的左孩子B的右子树上插入节点,使得A节点的平衡因子由1变为了2而引起的不平衡所进行的调整的操作:

解释:LR型先向左转再向右旋转。

B先变为C的左子树,CL变为B的右子树(以B为根向左逆时针旋转);

然后右旋的含义为A变成C的右子树,CR变为A的左子树(以A为根向右的顺时针旋转)。

《树形结构的查找(平衡二叉树--插入时调整)》

(4)RL型调整

由于在最小不平衡子树的根节点A的有孩子的左子树上插入一个节点使A失去平衡。

先右旋后左旋

第一次旋转(以B为根向右的顺时针旋转):将C插入A与B之间,CR作为B的左子树,

第二次旋转(以A为根向左的逆时针旋转):A作为C的左孩子,CL作为A的右子树

                             《树形结构的查找(平衡二叉树--插入时调整)》

    原文作者:平衡二叉树
    原文地址: https://blog.csdn.net/qq_22238021/article/details/78241663
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞