• 平衡二叉树 左旋和右旋思路


    二叉平衡树:

    平衡二叉搜索树(Self-balancing binary search tree)又被称为AVL树(有别于AVL算法),且具有以下性质:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。平衡二叉树的常用实现方法有红黑树AVL替罪羊树Treap伸展树等。 最小二叉平衡树的节点总数的公式如下 F(n)=F(n-1)+F(n-2)+1 这个类似于一个递归的数列,可以参考Fibonacci(斐波那契)数列,1是根节点,F(n-1)是左子树的节点数量,F(n-2)是右子树的节点数量。

    二叉平衡树的左子结点和右子结点 相差不能超过1(可以是0 or 1)

    左旋:

     

    A

      B

            C

    在这个树中  c的结点高度为1  b的结点高度为2  a的结点高度为3

    根据二叉平衡树的定义  可以知道此时树不平衡  

    如何把树平衡:

    当右结点高度大于左结点高度时

    想要把树平衡需要这样:

       B

    A     C

    此时可以看到A旋转到了下方

    此为树的左旋

    更多的情况:

     

    ROOT

          A

       D      B

            E    C

    ROOT的左结点高度为0   右结点高度为3

    此时结点高度大于1

    此时左旋后 树应该是:

    ROOT

          B

       A     C

    D    E       

    旋转前e结点一定比a结点要大  所以 旋转后 a的右结点应该改为 b的左结点(e)

    b结点放入a结点的位置 a结点成为b结点的左结点

    右旋:

     

         A

       B

     C

    此时c结点高度为1  b2  a3 树不平衡

    若要平衡则需要右旋:

            B

     C     A

    更多的情况

        ROOT

          A

                  B     D

               C   E

    此时树不平衡 若需平衡需要右旋

             ROOT

            B

               C     A

                     E      D

    幺蛾子:

         ROOT

                  A

            B          D   

               E

    左孩子大于有孩子时

    此时 b的左孩子比右孩子高  此时先左旋b 在右旋a

        

         ROOT

              A

          D       B

                 C

    右孩子大于左孩子时

    此时 b的左孩子比右孩子高  此时先右旋b 在左旋a

    学如逆水行舟,不进则退。 博客园技术交流群 群 号:1073255314 (本群没人,刚刚建立 -_-!!! )
  • 相关阅读:
    BZOJ 5308 [ZJOI2018] Day2T2 胖 | 二分 ST表
    CodeForces 464E The Classic Problem | 呆克斯歘 主席树维护高精度
    BZOJ5298 [CQOI2018] 交错序列 | 矩阵乘法和一个trick
    # BZOJ5300 [CQOI2018]九连环 题解 | 高精度 FFT
    [BZOJ5248] 2018九省联考 D1T1 一双木棋 | 博弈论 状压DP
    【2018九省联考】后的瞎扯
    BZOJ 4671 异或图 | 线性基 容斥 DFS
    Luogu 4294 [WC2008]游览计划 | 斯坦纳树
    BZOJ 2434 阿狸的打字机 | AC自动机
    UOJ#7. 【NOI2014】购票 | 线段树 凸包优化DP
  • 原文地址:https://www.cnblogs.com/Mj-NaijAm/p/13606602.html
Copyright © 2020-2023  润新知