1.基本概念
平衡二叉树也叫AVL树,它或者是一颗空树,或者具有以下性质的二叉排序树:它的左子树和左子树的高度之差(平衡因子)的绝对值不超过1,且它的左子树和右子树都是一颗平衡二叉树。
平衡二叉树是一个二叉搜索树,其次它每个子树的左右高度差都不超过一。
2.平衡二叉树
当插入一个新的结点,有可能会破坏树的平衡。需要保持平衡就要进行调整,根据不同的插入位置,一共有四种调整方法。
2.1 实现LL平衡旋转
2.2 实现RR平衡旋转
2.3 实现LR平衡旋转
第一步:通过“左旋转”,将"LR"转换成“LL”
第二步:通过“右旋转”,将“LL”转换成“平衡树”
2.4 实现RL平衡旋转
第一步:通过“右旋转”,将"RL"转换成“RR”
第二步:通过“左旋转”,将“RR”转换成“平衡树”
参考链接:blog.csdn.net/m0_45067620…
3.实例
对于一组数据,以插入顺序为2,6,11,13,17,22 为例
构建二叉查找树。
构建平衡二叉树,了解如何调整保持树的平衡。
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的左子树。
所以同样一组数据,平衡二叉树通过左旋右旋方式,维持二叉树的平衡,能够避免出现线性结构。
向左旋转
向右旋转
总结:
LL 向右旋转,转儿子,右子树不变
RR 向左旋转,转儿子,左子树不变
LR 先左转孙子再右转孙子
RL 先右转孙子再左转孙子