平衡二叉树(AVL)(BBT)

1、灵魂三问

1.1、为什么引入平衡二叉树这种结构?

为避免树的高度增长过快,导致降低二叉排序树的性能。

1.2 什么是平衡二叉树?

平衡二叉树可以定义为或者是一棵空树,或者是具有下列性质的排序二叉树:二叉排序树的任意结点的左、右子树的高度之差的绝对值不超过1,这样的二叉树称为平衡二叉树(BBT,Balanced Binary Tree)。又简称为AVL。

1.3 什么是平衡因子?

定义结点左子树与右子树的高度差称为该结点的平衡因子,显然,平衡因子的值只能取0,-1或1。

2、平衡二叉树的插入(难点)

2.1 基本思想

       基本思想:每当在二叉排序中插入(或删除)一个结点时,首先检查其插入路径上的结点是否因为此次操作而导致了不平衡。若导致了不平衡,则先找到插入路径上离插入结点最近的平衡因子的绝对值大于1的结点A,再对以结点A为根的子树,在保持二叉排序树特性的前提下,调整各结点的位置关系,使之重新达到平衡

注意:每次调整的对象都是最小不平衡子树。只要将最小不平衡子树调整平衡,则其他祖先结点都会恢复平衡。

 2.2 调整结点的四种规律

2.2.1 LL平衡旋转(右单旋转)

                                     

       由于在A结点的左孩子(L)的左子树(L)上插入了新结点(也就是BL的高度从H变成H+1),A的平衡因子由1增到2,所以需要一次向右的旋转操作。将B向右上旋转,代替A成为根结点,将A结点向右下旋转成为B的右子树的根结点。而B的原右子树成为了A的左子树。(由二叉排序树的性质决定的)

代码思路:

A->lchild = B->rchild; //A的左孩子变成B的右孩子
B->rchild = A; //B的右孩子变成A
Af->lchild/rchild = B; //B替代A成为根结点

2.2.2 RR平衡旋转(左单旋转)

                               

       由于在A结点的右孩子(R)的右子树(R)上插入了新结点(也就是BR的高度从H变成H+1),A的平衡因子由-1降到-2,所以需要一次向左的旋转操作。将B向左上旋转,代替A成为根结点,将A结点向左下旋转成为B的左子树的根结点。而B的原左子树成为了A的右子树。(由二叉排序树的性质决定的)

 代码思路:

A->rchild = B->lchild; //A的右孩子变成B的左孩子
B->lchild = A; //B的左孩子变成A
Af->lchild/rchild = B; //B替代A成为根结点

2.2.3 LR平衡旋转(先左后右双旋转)

                    

       由于在A结点的左孩子(L)的右子树(R)上插入了新结点(也就是BR的高度从H变成H+1),A的平衡因子由1增至2,所以需要两次旋转操作,先左旋再右旋。先将A结点的左孩子B的右孩子C向左上旋转,代替B的位置,然后再把该C结点向右上旋转提升到A的位置。

2.2.4 RL平衡旋转(先右再左双旋转)

    

       由于在A结点的右孩子(R)的左子树(L)上插入了新结点(也就是BL的高度从H变成H+1),A的平衡因子由-1降至-2,所以需要两次旋转操作,先右旋再左旋。先将A结点的右孩子B的左孩子C向右上旋转,代替B的位置,然后再把该C结点向左上旋转提升到A的位置

3、平衡二叉树的深度

3.1 平衡二叉树的最大深度

平衡二叉树结点数的递归公式为N0=1,N1=1,N2=2,Nh=1+Nh-1+Nh-2

(h为平衡二叉树高度,Nh为构造此高度的平衡二叉树所需的最小结点数)

例题:

3.1.1 具有五层结点的AVL至少有()个结点

很明显按照前面的公式计算,结果为12个结点。

3.1.2 若平衡二叉树的高度为6,且所有非叶子结点的平衡因子均为1,则该平衡二叉树的结点总数为()。

        所有非叶结点的平衡因子均为1,即平衡二叉树满足平衡的最少结点情况。这也就是可以用到3.1的公式。可推出,N6=20。

 

 

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值