1.二叉排序树定义

(1)二叉树如果有左子树,则左子树的所有节点都小于根节点
(2)如果有右子树,则右子树的所有节点都大于根节点
(3)二叉树的左子树和右子树也都是二叉排序树
2.二叉平衡树的定义
树的左子树和右子树都是平衡二叉树,且左子树和右子树的深度之差不大于1
二叉平衡树的作用在于在查找时,能保证每次查找的速度都差不多。
二叉排序树的代码我已经写过了,而如何将二叉排序树变为二叉平衡树呢?这需要在插入一个树节点是保证这个二叉树仍是平衡二叉树,这需要使用一种旋转的方法,如下:
设二叉树节点上的平衡因子BF(Balance Factor)定义为该节点的左子树的深度减它的右子树的深度。假设由于二叉排序树插入节点而失去平衡的最小子树根节点的指针为a(即a是离插入节点最近,且平衡因子绝对值超过1的节点),则失去平衡后进行调整的规律可归纳为以下4中情况:

(1)LL型:
新结点X插在A的左孩子的左子树里,调整方法如图,以B为轴心,将A结点从B结点的右上方转到B结点的右下侧,使A成为B的右孩子。
(2)RR型:
新节点X插在A的右子树的右子树里。调整方法如图,以B为轴心,将A结点从B结点的左上方转到B结点的左下侧,使A成为B的左孩子。
(3)LR型:
新节点X插在A的左孩子的右子树里。调整方法如图,第一步以X为轴心,将B从X的左上方转到X的左下侧,是B成为X的左孩子,X成为A的左孩子。第二步跟LL型处理一样。
(3)RL型:
新节点X插在A的右孩子的左子树里。调整方法如图,第一步以X为轴心,将B从X的右上方转到X的右下侧,是B成为X的右孩子,X成为A的右孩子。第二步跟RR型处理一样。
总结下就是旋转时为了保证依然是排序树,所以基本上就是如图的两种旋转方式,然后都是先转换为RR或者LL型。