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

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

1.左右双旋

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

如图所示,我们可以看出方框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.右左双旋

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

如图所示,我们可以看出方框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

    原文作者:AVL树
    原文地址: https://blog.csdn.net/manongdeyipiant/article/details/69182212
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞