数据结构(一) 平衡二叉树

47 阅读2分钟

1.基本概念

平衡二叉树也叫AVL树,它或者是一颗空树,或者具有以下性质的二叉排序树:它的左子树和左子树的高度之差(平衡因子)的绝对值不超过1,且它的左子树和右子树都是一颗平衡二叉树。

平衡二叉树是一个二叉搜索树,其次它每个子树的左右高度差都不超过一。

2.平衡二叉树

当插入一个新的结点,有可能会破坏树的平衡。需要保持平衡就要进行调整,根据不同的插入位置,一共有四种调整方法。

image.png

2.1 实现LL平衡旋转

image.png

2.2 实现RR平衡旋转

image.png

2.3 实现LR平衡旋转

第一步:通过“左旋转”,将"LR"转换成“LL”  
第二步:通过“右旋转”,将“LL”转换成“平衡树”

image.png

2.4 实现RL平衡旋转

第一步:通过“右旋转”,将"RL"转换成“RR”  
第二步:通过“左旋转”,将“RR”转换成“平衡树”

image.png

参考链接:blog.csdn.net/m0_45067620…

3.实例

对于一组数据,以插入顺序为2,6,11,13,17,22 为例

构建二叉查找树。

image.png

构建平衡二叉树,了解如何调整保持树的平衡。

image.png

1.插入结点2,平衡

2.插入结点6,平衡

3.插入结点11,发现结点2失去平衡,左子树高度为0,右子树高度为2,平衡因子-2。11的插入导致树不平衡了,11在2的右子树的右子树上,所以执行RR旋转。将6"左旋转"接替2的位置,6的左子树接2,右子树保持不变。

4.插入结点13,13>11,插入到11的右子树,平衡

5.插入结点17,17>13,插入到13的右子树,发现结点11失去平衡。17在11的右子树的右子树上,同理执行RR旋转。 13左旋转接替11的位置,13的左子树接11,右子树不变。

6.插入结点22,22>17, 插入到17的右子树,发现结点6失去平衡。22在6的右子树的右子树上,同理执行RR旋转。 13左旋转接替根节点6的位置,13的左子树接6,右子树不变,6的左子树不变,右子树接13的左子树。

所以同样一组数据,平衡二叉树通过左旋右旋方式,维持二叉树的平衡,能够避免出现线性结构。

向左旋转

20180722220546910

向右旋转

20180722222413303

总结:

LL 向右旋转,转儿子,右子树不变

RR 向左旋转,转儿子,左子树不变

LR 先左转孙子再右转孙子

RL 先右转孙子再左转孙子

参考链接:blog.csdn.net/m0_37914588…