平衡二叉树的定义
1、平衡二叉树是二叉排序树
2、平衡二叉树的平衡因子绝对值小于等于1
平衡二叉树的旋转
最小不平衡子树
最小不平衡子树,因为某个结点的插入导致失衡的最小子树且离插入结点最近的祖先结点,以该结点为根的子树称为最小不平衡子树。
旋转类型
LL型:在左孩子的左子树插入结点导致失衡,进行右旋操作
RR型:在右孩子的右子树插入结点导致失衡,进行左选操作
LR型:在左孩子的右子树插入结点导致失衡,先进行左旋,在右旋
RL型:在右孩子的左子树插入结点导致失衡,先进行右旋,在左旋
旋转方式
左旋:
1.旧根结点变成新根结点(一般为中间结点)的左子树
2.如果新根结点存在左子树则把它,变成旧结根点(旋转的结点)的右子树
(新结点的左子树要比旧结点的值要大,左旋是右单支树,右边的结点都比根结点大)
右旋:
1.旧根结点变成新根结点(一般为中间结点)的右子树
2.如果新根结点存在右子树,则变成旧根结点(旋转的结点)的左子树
(新结点的右子树都比旧结点的值要小,右旋是左单支树,左边的结点都比根要小)
平衡二叉树的调整
LL型
根据二叉排序树的定义,LL型是左单只树,且从根结点开始结点值大小递减,图中{A,B,Bl}。
根据平衡二叉树定义,平衡因子绝对值小于1,所以需要把值最大的根结点A‘掰’下来,同时需要把新根结点B的右孩子Br给旧根结点A的左孩子,变成符合定义的树,这就是所谓的右旋操作
RR型
同理,RR型是右单只树,从根结点开始结点的值小大递增,图中{A,B,Br},所以需要把值最小的根结点A‘掰’下来,同时需要把新根结点B的左孩子Bl给旧根结点A的右孩子,变成符合定义的树,这就是所谓的左旋操作。
LR型
LR型,根结点的值是最大的,中间结点的值是最小的,图中{A,B,C}
1.先进行左旋,将下半部分进行旋转,将中间最小值的结点往左下旋转(然后平移),同时将新根结点的左孩子给旧根结点的右孩子,此时树变成了“大-中-小”LL型的单只树形。
2.将{A,C,B}在进行右旋,将值大的根结点A‘掰’下来。
RL型
RL型,根结点的值是最小的,中间值最大,图中{A,B,C}
1.先进行右旋操作,将下半部分进行旋转,将中间最大值的结点往右下旋转(同时平移),此时树变成了“小-中-大”RR型的单只树。
2.将{A,C,B}在进行左旋,将小的根结点‘掰’下来,将旧的根结点的左孩子给新结点的右孩子。