~AVL树中构造双旋的情形~

上篇博客中,我已将AVL树的定义、性质及旋转的情况做了初步的介绍,现在我们着重看双旋的情况!

1.左右双旋

如图所示,我们可以看出方框a、b、c、d处都可以插入结点,故可分为以下几种情形:

1.将结点只插入方框a处,计算整棵树中结点的平衡因子可执行,该树就是一颗AVL树,无须旋转;

2.将结点只插入方框b中,则整棵树可以按照右单旋进行处理,构不成双旋;

3.将结点只插入方框c或者方框d中,则方框a、b中必须有一个结点。若方框b中无结点,则在结点20的平衡因子就是2,已经就需要调整了,无法上传到结点10;若方框a中无结点,则在结点10的平衡因子就是-2,已经就需要调整了,无法下传传到结点30,所以方框a、b中必须有结点,且为叶子结点。

此时,可将该树看作两部分,第一部分以结点20作为父亲结点及其以下的结点作为整体,进行整体的左单旋,单旋后的树为图中的第二棵树;第二部分以结点10作为父亲结点,将整棵树进行整体的右单旋,得到了图中的第三棵树,这棵树已经是AVL树了。

 

2.右左双旋

 

如图所示,我们可以看出方框a、b、c、d处都可以插入结点,故可分为以下几种情形:

1.将结点只插入方框a处,计算整棵树中结点的平衡因子可执行,该树就是一颗AVL树,无须旋转;

2.将结点只插入方框d中,则整棵树可以按照左单旋进行处理,构不成双旋;

3.将结点只插入方框c或者方框b中,则方框a、d中必须有一个结点。若方框d中无结点,则在结点20的平衡因子就是-2,已经就需要调整了,无法上传到结点10;若方框a中无结点,则在结点10的平衡因子就是-2,已经就需要调整了,无法下传传到结点30,所以方框a、d中必须有结点,且为叶子结点。

此时,可将该树看作两部分,第一部分以结点20作为父亲结点及其以下的结点作为整体,进行整体的右单旋,单旋后的树为图中的第二棵树;第二部分以结点10作为父亲结点,将整棵树进行整体的左单旋,得到了图中的第三棵树,这棵树已经是AVL树了。

 

若是不懂AVL树的定义、性质、左单旋及右单旋的童学,可以查看我的上一篇博客,链接为http://blog.csdn.net/manongdeyipiant/article/details/69175107

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值