精华内容
下载资源
问答
  • 动画演示平衡二叉树旋转
    2020-04-01 20:14:53

    https://www.cnblogs.com/xyjblog/archive/2010/05/19/1739263.html

    更多相关内容
  • word 资料 平衡二叉树操作的演示 需求分析 本程序是利用平衡二叉树实现动态查找表的基本功能创建表查找插入删除 具体功能 初始平衡二叉树为空树操作界面给出创建查找插入删除合并分裂六种操作供选择每种操作均提示...
  • 今天小编就为大家分享一篇关于平衡二叉树的左右旋以及双旋转的图文详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
  • 1. 理解前的知识储备 ...平衡二叉树插入新节点后只可能出现一棵最小不平衡树,经过平衡调整后的平衡二叉树不存在最小不平衡树 以下是两个例子,红笔圈起来的部分即最小不平衡树 2.LL旋转 当新节点添加在最小

    1. 理解前的知识储备

    • 二叉排序树

      通常二叉排序树呈现的特点是左子树元素值<根节点值<右子树元素值

      右子树元素全部大于左子树元素及根节点;左子树元素全部小于右子树元素及根节点

    • 平衡二叉树

      左右子树高度差小于等于1二叉排序树

    • 最小不平衡树

      一棵二叉排序树中左右子树高度差大于1的最小单位树。平衡二叉树插入新节点后只可能出现一棵最小不平衡树,经过平衡调整后的平衡二叉树不存在最小不平衡树

      以下是两个例子,红笔圈起来的部分即最小不平衡树

      image-20211107155253626

    2.LL旋转

    新节点添加在最小不平衡树根节点的左孩子的左子树且造成不平衡时使用此旋转

    操作

    1. 确定最小不平衡树在整棵树中的位置

    2. 定位到此树根节点R左节点P,目标是让P成为最终的根节点

    3. 左节点P进行右旋转【即让P去到根节点R的位置,根节点R下沉到右节点】,此操作不会破坏二叉排序树的结构

    4. 左节点P有右子树,则一并放到旋转后的根节点R的左边

      这里用到了二叉排序树右子树大于左子树的性质,因为原先P的右子树属于根节点R的左子树,所以P的右子树中所有节点值必定小于根节点R以及根节点R的右子树。

      经过旋转后,根节点R成为了P的右子树,而原先P的右子树必然是比P大且小于根节点R的,所以原先P的右子树放在P的右边,根节点R的左边

      image-20211107162215532

    3.RR旋转

    新节点添加在最小不平衡树根节点的右孩子的右子树且造成不平衡时使用此旋转

    操作

    1. 确定最小不平衡树在整棵树中的位置

    2. 定位到此树根节点R右节点P,目标是让P成为最终的根节点

    3. 右节点P进行左旋转【即让P去到根节点R的位置,根节点R下沉到左节点】,此操作不会破坏二叉排序树的结构

    4. 右节点P有左子树,则一并放到旋转后的根节点R的右边

      这里用到了二叉排序树左子树小于右子树的性质,因为原先P的左子树属于根节点R的右子树,所以P的左子树中所有节点值必定大于根节点R以及根节点R的左子树。

      经过旋转后,根节点R成为了P的左子树,而原先P的左子树必然是比P小且大于根节点R的,所以原先P的左子树放在P的左边,根节点R的右边

      image-20211107163200253

    4.LR旋转

    新节点添加在最小不平衡树根节点的左孩子的右子树且造成不平衡时使用此旋转

    操作

    1. 确定最小不平衡树在整棵树中的位置

    2. 定位到此树根节点R左节点L右孩子P,目标是让P成为最终的根节点

    3. 先将P左旋转到L的位置,此时将P记作Q

    4. 再将Q右旋转到R的位置

    5. 同理,若Q有右子树,则将此右子树一并放入到旋转后根节点R的左边

      原理同LL与RR旋转,可仔细体会上述解释过程

      image-20211107164727809

    5. RL旋转

    新节点添加在最小不平衡树根节点的右孩子的左子树且造成不平衡时使用此旋转

    操作

    1. 确定最小不平衡树在整棵树中的位置

    2. 定位到此树根节点R右节点L左孩子P,目标是让P成为最终的根节点

    3. 先将P右旋转到L的位置,此时将P记作Q

    4. 再将Q左旋转到R的位置

    5. 同理,若Q有左子树,则将此左子树一并放入到旋转后根节点R的右边

      原理同LL与RR旋转,可仔细体会上述解释过程

    image-20211107165521997

    6. 总结

    平衡二叉树的旋转不需要死记,千万不要被通篇的左右子树给弄迷糊了,建议可以画图进行步骤阅读,结合二叉排序树的性质可以更好的进行理解,若这篇文章对你有所帮助的话,不放给个免费的赞支持一下。

    展开全文
  • 平衡二叉树旋转

    千次阅读 2016-04-19 16:58:57
    平衡二叉树(Balanced Binary Tree)是二叉查找树的一个进化体,也是第一个引入平衡概念的二叉树。1962年,G.M. Adelson-Velsky 和 E.M. Landis发明了这棵树,所以它又叫AVL树。平衡二叉树要求对于每一个节点来说

    转载自:http://www.cppblog.com/cxiaojia/archive/2012/08/20/187776.html


    平衡二叉树(Balanced Binary Tree)是二叉查找树的一个进化体,也是第一个引入平衡概念的二叉树。1962年,G.M. Adelson-Velsky 和 E.M. Landis发明了这棵树,所以它又叫AVL树。平衡二叉树要求对于每一个节点来说,它的左右子树的高度之差不能超过1,如果插入或者删除一个节点使得高度之差大于1,就要进行节点之间的旋转,将二叉树重新维持在一个平衡状态。这个方案很好的解决了二叉查找树退化成链表的问题,把插入,查找,删除的时间复杂度最好情况和最坏情况都维持在O(logN)。但是频繁旋转会使插入和删除牺牲掉O(logN)左右的时间,不过相对二叉查找树来说,时间上稳定了很多。

    平衡二叉树实现的大部分过程和二叉查找树是一样的(学平衡二叉树之前一定要会二叉查找树),区别就在于插入和删除之后要写一个旋转算法去维持平衡,维持平衡需要借助一个节点高度的属性。我参考了机械工业出版社的《数据结构与算法分析-C语言描述》写了一个C++版的代码。这本书的AVLTree讲的很好,不过没有很完整的去描述。我会一步一步的讲解如何写平衡二叉树,重点是平衡二叉树的核心部分,也就是旋转算法。

    四种不平衡的情况:


          1、6节点的左子树3节点高度比右子树7节点大2,左子树3节点的左子树1节点高度大于右子树4节点,这种情况成为左左

      2、6节点的左子树2节点高度比右子树7节点大2,左子树2节点的左子树1节点高度小于右子树4节点,这种情况成为左右

      3、2节点的左子树1节点高度比右子树5节点小2,右子树5节点的左子树3节点高度大于右子树6节点,这种情况成为右左

      4、2节点的左子树1节点高度比右子树4节点小2,右子树4节点的左子树3节点高度小于右子树6节点,这种情况成为右右

      从图2中可以可以看出,1和4两种情况是对称的,这两种情况的旋转算法是一致的,只需要经过一次旋转就可以达到目标,我们称之为单旋转。2和3两种情况也是对称的,这两种情况的旋转算法也是一致的,需要进行两次旋转,我们称之为双旋转。

    单旋转:

    左左和右右的旋转方式对称,且都只需要一次旋转就能恢复平衡。


    双选装:

    对于左右和右左这两种情况,单旋转不能使它达到一个平衡状态,要经过两次旋转。


    展开全文
  • AVL(平衡二叉树) AVL定义 左子树和右子树的高度之差的绝对值不超过1,高度之差也叫做平衡因子(Balance Factor),简称BF 左右子树也都是平衡二叉树 当一个节点没有左子树时,左子树高度为-1 当一个节点的左子树...

    AVL(平衡二叉树)

    AVL定义

    • 左子树和右子树的高度之差的绝对值不超过1,高度之差也叫做平衡因子(Balance Factor),简称BF
    • 左右子树也都是平衡二叉树

    image-20200930151109715

    当一个节点没有左子树时,左子树高度为-1
    当一个节点的左子树时叶子节点时,左子树的高度为0
    当一个节点的左子树的左子树是叶子节点时,左子树的高度为1
    # 如图所示:
    # 例1:
    以2为根节点,左子树的高度为0,右子树的高度为1,0 - 1 = 1,满足平衡二叉树条件 -1 <= BF <= 1
    # 例2:
    以1为根节点,左右子树的高度都为-1,-1 - -1 = 0,满足平衡二叉树条件 -1 <= BF <= 1,叶子节点也是平衡二叉树
    # 例3:
    以3为根节点,左子树高度为-1,右子树高度为0,-1 - 0 = -1,满足平衡二叉树条件 -1 <= BF <= 1
    

    AVL插入

    • 二叉平衡树在插入或删除一个结点时,先检查该操作是否导致了树的不平衡,若是,则在该路径上查找最小的不平衡树,调节其平衡。

    • 4种平衡调整如下:

    LL(左左右单旋转)

    image-20200930155235954

    # LL(左左)右单旋转,举例:
    1、插入20后,导致50为根节点的树失衡(左子树高度为2,右子树高度为0,已40为根节点的树并没有失衡)
    2、20节点在50的左子树上,最终也是在30的左子树上,在左左子树的左边节点,满足左左,进行右单旋转
    3、右单旋转可以把树看做是一根链条,以50为支点,向右边拉动一格
    4、旋转完成后,恢复平衡
    

    RR左单旋转

    image-20200930161702805

    # RR(右右)左单旋转,举例:
    1、插入65后,导致40为根节点的树失衡(左子树高度为0,右子树高度为2,已50为根节点的树并没有失衡)
    2、65节点在40的右子树上,最终也是在60的右子树上,在右子树的右边节点,满足右右,进行左单旋转
    3、左单旋转可以把树看做是一根链条,以40为支点,向左边拉动一格
    4、旋转完成后,恢复平衡
    

    LR左右情况

    image-20200930170538227

    # 无法通过一次旋转恢复平衡,先将左子树向左旋转一次,转换成LL型,再向右旋转
    # 第一列:
    1、插入42后,导致50为根节点的树失衡(左子树高度为2,右子树高度为0)
    2、42插入在左子树的右子树上,将左子树向左旋转一次
    3、此时满足了LL,向右旋转一次
    4、恢复平衡
    

    RL右左情况

    image-20200930173540532

    # 无法通过一次旋转恢复平衡,先将右子树向右旋转一次,转换成RR型,再向左旋转
    # 第一列:
    1、插入43后,导致40为根节点的树失衡(左子树高度为0,右子树高度为2)
    2、43插入在右子树的左子树上,将右子树向右旋转一次
    3、此时满足了RR,向左旋转一次
    4、恢复平衡
    
    展开全文
  • 平衡二叉树旋转详解

    万次阅读 多人点赞 2017-04-29 16:28:56
    平衡二叉树的定义(AVL)定义 平衡二叉树或者是一棵空树,或者满足以下的性质:它的左子树和右子树的高度之差的绝对值不超过1,并且左子树和右子树也是一个平衡二叉树。 平衡因子 左子树高度减去右子树的高度的值...
  • 刚开始听这个平衡二叉树旋转,一听就蒙了,后来看了很多视频,有很多的说法。下面来介绍平衡二叉树 平衡二叉树:就是每个节点的平衡因子(Balance Factor)(以下简称BF)的绝对值小于等于1,即为0或1。 而BF就是每...
  • 平衡二叉树旋转原理(图示)

    万次阅读 2016-05-02 20:21:32
    //root节点的左子树的左节点旋转法 static treeNode *LL(treeNode *p) { treeNode *tmp = lchild(p); lchild(p) = rchild(tmp); rchild(tmp) = p; _height(p) = mmax(height(lchild(p)),height(rchild(p)))+1;//...
  • 平衡二叉树可视化

    2015-03-11 18:18:20
    平衡二叉树,使用windows编程画出图形界面
  • 平衡二叉树 旋转

    2013-04-13 19:09:51
    示意图不能显示,建议大家去上面的网址查看 平衡二叉树  对于二叉查找树,尽管查找、插入及删除操作的平均运行时间为O(logn),但是它们的最差运行时间都是O...平衡二叉树又称为AVL树,它或者是一棵空树,或者是有下
  • 浅析平衡二叉树的四种旋转

    千次阅读 多人点赞 2021-03-09 17:10:21
    浅析平衡二叉树(AVL树)的四种旋转 平衡二叉树中每个节点的左子树和右子树高度之差的绝对值小于等于1 在二叉树插入数据后会有四种类型,为了符合平衡二叉树左孩子与右孩子高度只差绝对值小于等于1,那么就会形成...
  • 平衡二叉树旋转理解

    千次阅读 多人点赞 2019-03-12 13:58:54
    给A的左子树的左边插导致A不平衡 只看BL,B,A,AR4个点,右旋后变成 然后看BR节点,因为BR原来在B的右子树,因此B&lt;BR&lt;A,根据这点将BR在补上,比B大因此在B的右子树,比A小,因此在A的左子树。 2.右...
  • 经过一天的学习,笔者发现网上少有人剖析平衡二叉树为何要分为四种旋转情况(尤其是LR型和RL型旋转),学习起来感觉云里雾里。查阅相关资料后,笔者整理了以下几种解释,其中夹杂着笔者自己的理解(笔者也是初学,水平...
  • 【数据结构】平衡二叉树怎么自己画?        是什么?     要了解平衡二叉树,先得了解什么是二叉树? 二叉树定义: 在计算机中,二叉树是每一个节点最多有两...
  • AVL 平衡二叉树旋转方法

    万次阅读 2017-03-10 21:05:10
    平衡二叉树的初始高度为 -1,它保证输的深度为 O(logN)。一颗 AVL 树必须满足其每个节点的左子树和右子树的高度差 。 2、不平衡的状况 假设一颗 AVL 树的某个节点为 r,有四种操作会使 r 的左右子树高度差大于...
  • 平衡二叉树的定义: 任意的左右子树高度差的绝对值不超过1,将这样的二叉树称为平衡二叉树,二叉平衡树前提是一个二叉排序树。 (1)LL:插入一个新节点到根节点的左子树(Left)的左子树(Left),导致根节点的...
  • 该套代码是博主在学习数据结构的平衡二叉树时总结整理的一套平衡二叉树的代码,包括平衡二叉树的创建,插入,旋转,遍历等一套完善的代码,亲自测试过,代码保证是对的。
  • 在前一篇文章《平衡二叉树插入及删除操作的图形化展示,python调用graphviz自动生成svg图形》用图形化的方式展示了平衡二叉树在插入或删除时图形的变化。 平衡二叉树在插入或删除节点时可能会打破原有的平衡,所以在...
  • 平衡二叉树旋转

    2021-10-28 15:58:11
    平衡二叉树旋转都是发生在最小不平衡子树上的,先看一下最简单的最小不平衡子树的形态: 其中结点C的插入导致了平衡树出现了不平衡,那怎么解决更好呢,我有一个想法,那就是把这3个结点中的中位数提到根结点。那...
  • 平衡二叉树(树的旋转

    万次阅读 多人点赞 2018-08-15 23:10:07
    1.概念 平衡二叉树建立在二叉排序树的基础上,目的是使二叉...平衡二叉树的递归定义:平衡二叉树是一棵二叉树,其可以为空,或满足如下2个性质:①左右子树深度之差的绝对值不大于1。②左右子树都是平衡二叉树。 平...
  • 平衡二叉树要求对于每一个节点来说,它的左右子树的高度之差不能超过1,如果插入或者删除一个节点使得高度之差大于1,就要进行节点之间的旋转,将二叉树重新维持在一个平衡状态。这个方案很好的解决了二叉查找树退化...
  • 一直没太弄明白这个到底是怎么旋转的,我是希望自己脑海中可以想象到画面,这样做题就能快些,所以上网找了些资料,不涉及代码。从这篇文章中受到了启发,终于弄明白了。https://www.jianshu.com/p/d802766551ff ...
  • 平衡二叉树旋转 http://blog.csdn.net/vesper305/article/details/13614403
  • 平衡二叉树-的四种旋转调整(代码,图解) 1.右单旋: 新插入节点插入在较高左子树的左侧(左左右),插入新节点二十: 1.修改parent和curLR的孩子指针域 parent->left = curLR; // 避免左单支的场景:subLR是...
  • 数据结构——平衡二叉树的的旋转问题

    万次阅读 多人点赞 2018-12-29 21:22:39
    对于画出一个平衡二叉树过程中的旋转需要交换孩子的问题!
  • 平衡二叉树的调整旋转的命名规则RR旋转(右单旋)LL旋转(左单旋)LR旋转(左右旋转)RL旋转(右左旋转旋转的命名规则 如图初始插入节点Nov后,Mar节点的平衡因子(左右两个子树的高度差的绝对值)大于1,不满足...
  • 形态匀称的二叉树称为平衡二叉树 (Balanced binary tree) ,其严格定义是:  一棵空树是平衡二叉树;若 T 是一棵非空二叉树,其左、右子树为 TL 和 TR ,令 hl 和 hr 分别为左、右子树的深度。当且仅当  ①TL 、 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 23,404
精华内容 9,361
关键字:

平衡二叉树如何旋转