码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2020-09-17 12:00:19      阅读:59      评论:0      收藏:0      [点我收藏+]

标签:ike   平衡二叉树   cci   root   高度   大于   https   总数   sel   

二叉平衡树:

 

平衡二叉搜索树(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

 

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

标签:ike   平衡二叉树   cci   root   高度   大于   https   总数   sel   

原文地址:https://www.cnblogs.com/Mj-NaijAm/p/13606602.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!