最美二叉树—平衡二叉树

目录

一、平衡二叉树的定义

二、平衡二叉树的插入

三、调整最小不平衡子树A

四、调整最小不平衡子树(LL)

五、调整最小不平衡子树(RR)

七、调整最小平衡子树(LR)

八、调整最小不平衡子树(RL)

九、调整最小不平衡子树

十、练习

十、查找效率分析

十一、总结

一、平衡二叉树的定义

平衡二叉树,简称平衡树(AVL树)——树上任一结点的左子树和右子树的高度之差不超过1。

结点的平衡因子=左子树高-右子树高。

typedef struct AVLNode{
    int key;
    int balance;
    struct AVLNode *lchild,*rchild;
}AVLNode,*AVLTree;

最美二叉树—平衡二叉树_第1张图片最美二叉树—平衡二叉树_第2张图片

二、平衡二叉树的插入

思考:在二叉排序树中插入新结点后,如何保持平衡?
最美二叉树—平衡二叉树_第3张图片

注:每次调整的对象都是“最小不平衡子树”

最美二叉树—平衡二叉树_第4张图片

三、调整最小不平衡子树A

四种情况:

LL——在A的左孩子的左子树中插入导致不平衡

RR——在A的右孩子的右子树中插入导致不平衡

LR——在A的左孩子的右子树中插入导致不平衡

RL——在A的右孩子的左子树中插入导致不平衡

四、调整最小不平衡子树(LL)

最美二叉树—平衡二叉树_第5张图片最美二叉树—平衡二叉树_第6张图片最美二叉树—平衡二叉树_第7张图片

目标:1.恢复平衡;2.保持二叉排序树特性

二叉排序树的特性:左子树结点值<根节点值<右子树结点值

BL

LL平衡旋转(右单旋转)。由于在结点A的左孩子(L)的左子树(L)上插入了新结点,A的平衡因子由1增至2,导致以A为根的子树失去平衡,需要一次向右的旋转操作。将A的左子树B向右上旋转代替A称为根节点,将A结点向右下旋转称为B的右子树的根结点,而B的原右子树则作为A结点的左子树。

五、调整最小不平衡子树(RR)

最美二叉树—平衡二叉树_第8张图片最美二叉树—平衡二叉树_第9张图片最美二叉树—平衡二叉树_第10张图片

二叉排序树的特性:左子树结点值<根节点值<右子树结点值

AL

RR平衡旋转(左单旋转)。由于在结点A的右孩子(R)的右子树(R)上插入了新结点,A的平衡因子由-1减至-2,导致以A为根的子树失去平衡,需要一次向左的旋转操作,将A的右孩子B向左上旋转代替A称为根结点,将A结点向左下旋转称为B的左子树的根结点,而B的原左子树则作为A结点的右子树

代码思路

最美二叉树—平衡二叉树_第11张图片

实现f向右下旋转,p向右上旋转:

其中f是爹,p为左孩子,g为f他爹

①f->lchild = p->rchild;

②p->rchild = f;

③gf->lchild/rchild = p;

BL

最美二叉树—平衡二叉树_第12张图片

实现f向左下旋转,p向左手旋转:

其中f是爹,p为右孩子,gf为f他爹

①f->rchild = p->lchild;

②p->lchild = f;

③gf->lchild/rchild = p;

AL

七、调整最小平衡子树(LR)

最美二叉树—平衡二叉树_第13张图片最美二叉树—平衡二叉树_第14张图片最美二叉树—平衡二叉树_第15张图片

LR平衡旋转(先左后右双旋转)。由于在A的左孩子(L)的右子树(R)上插入新结点,A的平衡因子由1增至2,导致以A为根的子树失去平衡,需要进行两次旋转操作,先左旋转后又旋转。先将A结点的左孩子B的右子树的根结点C向左上旋转提升到B结点的位置,然后再把该C结点向右上旋转提升到A结点的位置

最美二叉树—平衡二叉树_第16张图片

BL

两种情况:

最美二叉树—平衡二叉树_第17张图片最美二叉树—平衡二叉树_第18张图片

最美二叉树—平衡二叉树_第19张图片最美二叉树—平衡二叉树_第20张图片

八、调整最小不平衡子树(RL)

最美二叉树—平衡二叉树_第21张图片最美二叉树—平衡二叉树_第22张图片最美二叉树—平衡二叉树_第23张图片

RL平衡旋转(先右后左双旋转)。由于在A的右孩子(R)的左子树(L)上插入新结点,A的平衡因子由-1减至-2,导致以A为根的子树失去平衡,需要进行两次旋转操作,先右旋转后左旋转。先将A结点的右孩子B的左子树的根节点C向右上旋转提升到B结点的位置,然后再把该C结点向左上旋转提升到A结点的位置

最美二叉树—平衡二叉树_第24张图片

两种情况:

最美二叉树—平衡二叉树_第25张图片最美二叉树—平衡二叉树_第26张图片

最美二叉树—平衡二叉树_第27张图片最美二叉树—平衡二叉树_第28张图片

九、调整最小不平衡子树

总结:只有左孩子才能右上旋转,只有右孩子才能左上旋转

最美二叉树—平衡二叉树_第29张图片

插入操作导致“最小不平衡子树”高度+1,经过调整后高度恢复

十、练习

1.RR型

最美二叉树—平衡二叉树_第30张图片

2.RL型

最美二叉树—平衡二叉树_第31张图片

最美二叉树—平衡二叉树_第32张图片

最美二叉树—平衡二叉树_第33张图片

3.LR型

最美二叉树—平衡二叉树_第34张图片

最美二叉树—平衡二叉树_第35张图片

十、查找效率分析

若树高为h,则最坏情况下,查找一个关键字最多需要对比h次,即查找操作的时间复杂度不可能超过O(h)

最美二叉树—平衡二叉树_第36张图片

十一、总结

最美二叉树—平衡二叉树_第37张图片

你可能感兴趣的:(考研数据结构)