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

    xiaoxiao2021-03-25  99

    上篇博客中,我已将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

    转载请注明原文地址: https://ju.6miu.com/read-19640.html

    最新回复(0)