精华内容
下载资源
问答
  • 平衡二叉树旋转

    2018-04-12 15:24:00
    若向平衡二叉树中插入一个新结点后破坏了平衡二叉树的平衡性。首先要找出插入新结点后失去平衡的最小子树根结点的指针。然后再调整这个子树中有关结点之间的链接关系,使之成为新的平衡子树。当失去平衡的最小子树被...

    若向平衡二叉树中插入一个新结点后破坏了平衡二叉树的平衡性。首先要找出插入新结点后失去平衡的最小子树根结点的指针。然后再调整这个子树中有关结点之间的链接关系,使之成为新的平衡子树。当失去平衡的最小子树被调整为平衡子树后,原有其他所有不平衡子树无需调整,整个二叉排序树就又成为一棵平衡二叉树。

    失去平衡的最小子树是指以离插入结点最近,且平衡因子绝对值大于 1 的结点作为根的子树。假设用 A 表示失去平衡的最小子树的根结点,则调整该子树的操作可归纳为下列四种情况。

    ( 1 ) LL 型平衡旋转法

    由于在 A 的左孩子 B 的左子树上插入结点 F ,使 A 的平衡因子由 1 增至 2 而失去平衡。故需进行一次顺时针旋转操作。 即将 A 的左孩子 B 向右上旋转代替 A 作为根结点, A 向右下旋转成为 B 的右子树的根结点。而原来 B 的右子树则变成 A 的左子树。

     

    ( 2 ) RR 型平衡旋转法

    由于在 A 的右孩子 C  的右子树上插入结点 F ,使 A 的平衡因子由 -1 减至 -2 而失去平衡。故需进行一次逆时针旋转操作。即将 A的右孩子 C 向左上旋转代替 A 作为根结点, A 向左下旋转成为 C 的左子树的根结点。而原来 C 的左子树则变成 A 的右子树。

     

    ( 3 ) LR 型平衡旋转法

    由于在 A 的左孩子 B 的右子数上插入结点 F ,使 A 的平衡因子由 1 增至 2 而失去平衡。故需进行两次旋转操作(先逆时针,后顺时针)。即先将 A 结点的左孩子 B 的右子树的根结点 D 向左上旋转提升到 B 结点的位置,然后再把该 D 结点向右上旋转提升到 A 结点的位置。即先使之成为 LL 型,再按 LL 型处理 。

     

    如图中所示,即先将圆圈部分先调整为平衡树,然后将其以根结点接到 A 的左子树上,此时成为 LL 型,再按 LL 型处理成平衡型。

    ( 4 ) RL 型平衡旋转法

    由于在 A 的右孩子 C 的左子树上插入结点 F ,使 A 的平衡因子由 -1 减至 -2 而失去平衡。故需进行两次旋转操作(先顺时针,后逆时针),即先将 A 结点的右孩子 C 的左子树的根结点 D 向右上旋转提升到 C 结点的位置,然后再把该 D 结点向左上旋转提升到 A 结点的位置。即先使之成为 RR 型,再按 RR 型处理。

     

    如图中所示,即先将圆圈部分先调整为平衡树,然后将其以根结点接到 A 的左子树上,此时成为 RR 型,再按 RR 型处理成平衡型。

    平衡化靠的是旋转。 参与旋转的是 3 个节点(其中一个可能是外部节点 NULL ),旋转就是把这 3 个节点转个位置。注意的是,左旋的时候 p->right 一定不为空,右旋的时候 p->left 一定不为空,这是显而易见的。

    如果从空树开始建立,并时刻保持平衡,那么不平衡只会发生在插入删除操作上,而不平衡的标志就是出现 bf == 2 或者  bf == -2的节点。

     

    转载于:https://www.cnblogs.com/dj0325/p/8808004.html

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

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

    转自:http://gengning938.blog.163.com/blog/static/12822538120114164564057/

    示意图不能显示,建议大家去上面的网址查看

    平衡二叉树 

    对于二叉查找树,尽管查找、插入及删除操作的平均运行时间为O(logn),但是它们的最差运行时间都是O(n),原因在于对树的形状没有限制。

    平衡二叉树又称为AVL树,它或者是一棵空树,或者是有下列性质的二叉树:它的左子树和右子树都是平衡二叉树,且左右子树的深度之差的绝对值不超过1。二叉树的的平衡因子BF为:该结点的左子树的深度减去它的右子树的深度,则平衡二叉树的所有结点的平衡因子为只可能是:-101

    一棵好的平衡二叉树的特征:

    1)保证有n个结点的树的高度为O(logn)

    2)容易维护,也就是说,在做数据项的插入或删除操作时,为平衡树所做的一些辅助操作时间开销为O(1)

    一、平衡二叉树的构造

    在一棵二叉查找树中插入结点后,调整其为平衡二叉树。若向平衡二叉树中插入一个新结点后破坏了平衡二叉树的平衡性。首先要找出插入新结点后失去平衡的最小子树根结点的指针。然后再调整这个子树中有关结点之间的链接关系,使之成为新的平衡子树。当失去平衡的最小子树被调整为平衡子树后,原有其他所有不平衡子树无需调整,整个二叉排序树就又成为一棵平衡二叉树

    1.调整方法

    1)插入点位置必须满足二叉查找树的性质,即任意一棵子树的左结点都小于根结点,右结点大于根结点

    2)找出插入结点后不平衡的最小二叉树进行调整,如果是整个树不平衡,才进行整个树的调整。

    2.调整方式

    1LL

    LL型:插入位置为左子树的左结点,进行向右旋转

    由于在A的左孩子B的左子树上插入结点F,使A的平衡因子由1变为2,成为不平衡的最小二叉树根结点。此时A结点顺时针右旋转,旋转过程中遵循旋转优先的规则A结点替换D结点成为B结点的右子树,D结点成为A结点的左孩子。


    2RR

    RR型:插入位置为右子树的右孩子,进行向左旋转

    由于在A的右子树C的右子树插入了结点FA的平衡因子由-1变为-2,成为不平衡的最小二叉树根结点。此时,A结点逆时针左旋转,遵循旋转优先的规则A结点替换D结点成为C的左子树,D结点成为A的右子树。


    3LR

    LR型:插入位置为左子树的右孩子,要进行两次旋转,先左旋转,再右旋转;第一次最小不平衡子树的根结点先不动,调整插入结点所在的子树,第二次再调整最小不平衡子树。

     

     由于在A的左子树B的右子树上插入了结点FA的平衡因子由1变为了2,成为不平衡的最小二叉树根结点。第一次旋转A结点不动,先将B的右子树的根结点D向左上旋转提升到B结点的位置,然后再把该D结点向右上旋转提升到A结点的位置。

    4RL

    RL型:插入位置为右子树的左孩子,进行两次调整,先右旋转再左旋转;处理情况与LR类似。

     

    展开全文
  • word 资料 平衡二叉树操作的演示 需求分析 本程序是利用平衡二叉树实现动态查找表的基本功能创建表查找插入删除 具体功能 初始平衡二叉树为空树操作界面给出创建查找插入删除合并分裂六种操作供选择每种操作均提示...
  • 形态匀称的二叉树称为平衡二叉树 (Balanced binary tree) ,其严格定义是:  一棵空树是平衡二叉树;若 T 是一棵非空二叉树,其左、右子树为 TL 和 TR ,令 hl 和 hr 分别为左、右子树的深度。当且仅当  ①TL 、...
    形态匀称的二叉树称为平衡二叉树 (Balanced binary tree) ,其严格定义是:
      一棵空树是平衡二叉树;若 T 是一棵非空二叉树,其左、右子树为 TL 和 TR ,令 hl 和 hr 分别为左、右子树的深度。当且仅当
       ①TL 、 TR 都是平衡二叉树; 
       ② | hl - hr |≤ 1;
    时,则 T 是平衡二叉树。
    【例】如图 8.4 所示。
             
     8.4.gif 
                 (a)平衡二叉树           (b)非平衡二叉树
                          图8.3 平衡二叉树与非平衡二叉树
    相应地定义 hl - hr 为二叉平衡树的平衡因子 (balance factor) 。因此,平衡二叉树上所有结点的平衡因子可能是 -1 , 0 , 1 。换言之,若一棵二叉树上任一结点的平衡因子的绝对值都不大于 1 ,则该树是就平衡二叉树。
    动态平衡技术 
    1.动态平衡技术
    Adelson-Velskii 和 Landis 提出了一个动态地保持二叉排序树平衡的方法,其基本思想是:
      在构造二叉排序树的过程中,每当插入一个结点时,首先检查是否因插入而破坏了树的平衡性,如果是因插入结点而破坏了树的平衡性,则找出其中最小不平衡子树,在保持排序树特性的前提下,调整最小不平衡子树中各结点之间的连接关系,以达到新的平衡。通常将这样得到的平衡二叉排序树简称为 AVL 树
    2.最小不平衡子树
      以离插入结点最近、且平衡因子绝对值大于 1 的结点作根结点的子树。为了简化讨论,不妨假设二叉排序树的最小不平衡子树的根结点为 A ,则调整该子树的规律可归纳为下列四种情况:
    (1) LL 型:
      新结点 X 插在 A 的左孩子的左子树里。调整方法见图 8.5(a) 。图中以 B 为轴心,将 A 结点从 B 的右上方转到 B 的右下侧,使 A 成为 B 的右孩子。
          
     8.5.gif 
              图8.5 平衡调整的4种基本类型(结点旁的数字是平衡因子)
    (2)RR 型:
      新结点 X 插在 A 的右孩子的右子树里。调整方法见图 8.5(b) 。图中以 B 为轴心,将 A 结点从 B 的左上方转到 B 的左下侧,使 A 成为 B 的左孩子。
    (3)LR 型:
      新结点 X 插在 A 的左孩子的右子树里。调整方法见图 8.5(c) 。分为两步进行:第一步以 X 为轴心,将 B 从 X 的左上方转到 X 的左下侧,使 B 成为 X 的左孩子, X 成为 A 的左孩子。第二步跟 LL 型一样处理 ( 应以 X 为轴心 ) 。 
    (4)RL 型:
      新结点 X 插在 A 的右孩子的左子树里。调整方法见图 8.5(d) 。分为两步进行:第一步以 X 为轴心,将 B 从 X 的右上方转到 X 的右下侧,使 B 成为 X 的右孩子, X 成为 A 的右孩子。第二步跟 RR 型一样处理 ( 应以 X 为轴心 ) 。

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

    2018-03-07 17:12:48
    http://blog.csdn.net/innobase/article/details/51298037对于平衡二叉树旋转的原理详解,该博客示例的很详细。主要包括LL、RR、LR、RL四种情况的旋转。LL情况:RR情况:LR情况:RL情况:...

    http://blog.csdn.net/innobase/article/details/51298037

    对于平衡二叉树旋转的原理详解,该博客示例的很详细。

    主要包括LL、RR、LR、RL四种情况的旋转。

    LL情况:


    RR情况:


    LR情况:


    RL情况:


    展开全文
  • 平衡二叉树旋转 http://blog.csdn.net/vesper305/article/details/13614403
  • 平衡二叉树旋转详解

    千次阅读 多人点赞 2017-04-29 16:28:56
    平衡二叉树的定义(AVL)定义 平衡二叉树或者是一棵空树,或者满足以下的性质:它的左子树和右子树的高度之差的绝对值不超过1,并且左子树和右子树也是一个平衡二叉树。 平衡因子 左子树高度减去右子树的高度的值...
  • AVL(平衡二叉树) AVL定义 左子树和右子树的高度之差的绝对值不超过1,高度之差也叫做平衡因子(Balance Factor),简称BF 左右子树也都是平衡二叉树 当一个节点没有左子树时,左子树高度为-1 当一个节点的左子树...
  • 平衡二叉树旋转分为4种:LL,RR,LR,RL 一、旋转 1.LL Avlnode * LL(Avlnode *root) { Avlnode * k1 = root->lchild; root->lchild = k1->rchild; k1->rchild = root; k1->height = max(h(k1-&...
  • 平衡二叉树旋转理解

    千次阅读 多人点赞 2019-03-12 13:58:54
    给A的左子树的左边插导致A不平衡 只看BL,B,A,AR4个点,右旋后变成 然后看BR节点,因为BR原来在B的右子树,因此B<BR<A,根据这点将BR在补上,比B大因此在B的右子树,比A小,因此在A的左子树。 2.右...
  • 平衡二叉树旋转法则

    2019-05-13 17:04:30
    新添加元素直接作为叶结点加到对应结点后面
  •   我们知道在二叉查找树中,如果插入元素的顺序接近有序,那么二叉查找树将退化...如何使得二叉查找树无论在什么样情况下都能使它的形态最大限度地接近满二叉树以保证它的查找效率呢? 前苏联科学家G.M. Adels...
  • 平衡二叉树旋转

    2017-04-05 09:08:00
    1、 如何回溯修改祖先结点的平衡因子 我们知道,在AVL树上插入一个新结点后,有可能导致其他结点BF值的改变,哪些结点的BF值会被改变?如何计算新的BF值呢?要解决这些问题,我们必须理解以下几个要点: l 只有根...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,618
精华内容 647
关键字:

平衡二叉树旋转