AVLTree旋转实现

本文详细介绍了AVL树中六种不同的旋转操作及其应用场景。通过具体案例解释了如何解决节点不平衡的问题,并提供了一种简洁高效的封装函数实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*

*调整节点的平衡

*

* 入口参数 :a 为最小不平衡因子      t  用于存放新的树根

*/

void Rotate(AVLTree *t,AVLTree a)  /*

{                               * 本人写的此封装旋转的函数包括了六种旋转情况

AVLTree b;                  * 如下六种:

if(a->bf==2)                 *         A(RR)            A(RL)

{                          *       /  /         /  /  |

b=a->lchild;             *           #   B        #    B

if(b->bf==1)             *        /  /               /  /   

{                      *       #    #            C     #               

*t=LL_Rotate(a);     *                            /  /

}                      *                       #    #

else                    * 

{                      * 

*t=LR_Rotate(a);     *               A(LL)                            A(LR)

}                      *         /  /                 /  /

}//左边不平衡的时候         *    B     #              B    #   

Else                        *  /  /                 /  / 

{                          * #    #               #     C

b=a->rchild;             *                               /  /

if(b->bf==1)             *                              #    #

{                      *

*t=RL_Rotate(a);     *

}                      *      A (RL)                                            A(LR)

Else                    *    /   /                         /  / 

{                      *    #    B                       B     #

  *t=RR_Rotate(a);     *          /  /                    /  / 

}                      *      #     #                 #     # 

}//右边不平衡的时候     上述插入或删除在B左孩子】  【上述插入或删除在B左孩子

}                              *

                               */

说明:本人本来是没有留意的,仅仅认为有四种。而现在可以清晰的描述上述6种情况,完全是在调试平衡二叉排序树删除节点时候发现的,所以非常的高兴,虽然书上描述四种,但是可以包括六种情况。此函数可以屏蔽旋转,不需要特别的判断,这里特别指出,是因为此函数特别好用,非常方便,希望老师可以满意。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值