`
zcwfeng
  • 浏览: 106538 次
  • 性别: Icon_minigender_1
  • 来自: 吉林
社区版块
存档分类
最新评论

平衡二叉树以及平衡二叉树旋转

 
阅读更多
形态匀称的二叉树称为平衡二叉树 (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 为轴心 ) 。
分享到:
评论

相关推荐

    平衡二叉树(增加-删除)

    不管是从根节点还是从最小不平衡二叉树开始旋转平衡,可能都会出现一次遍历无法平衡的情况(会出现连锁反应)。 如果整棵树可以做到随时完全平衡处理,那就可以实现增加子树及删除子树的操作了。

    数据结构平衡二叉树课程设计

    在IT领域,数据结构是计算机科学的基础,而平衡二叉树是其中一个重要概念,尤其对于高效的数据检索和存储。在这个“数据结构平衡二叉树课程设计”中,我们重点探讨了如何使用C语言实现平衡二叉树,并包含了课程设计...

    平衡二叉树操作的演示

    平衡二叉树是一种特殊的二叉树数据结构,其特性在于左右子树的高度差不超过1,这使得在树中的任何节点上进行查找、插入和删除操作的时间复杂度都能保证为O(log n)。AVL树是最早被提出的自平衡二叉搜索树,由G. M. ...

    2015广工数据结构实验--平衡二叉树(包含源码和实验报告

    平衡二叉树(Balanced Binary Tree)是数据结构中的一个重要概念,尤其在算法设计和数据库系统中发挥着关键作用。本实验是针对广东工业大学(简称“广工”)学生的一次数据结构课程实践,旨在让学生深入理解平衡...

    平衡二叉树算法详细解释

    平衡二叉树是一种特殊的二叉树结构,它的主要特性是左右子树的高度差不超过1,保证了树的形态均匀,从而在查找、插入和删除等操作上的效率接近于最佳的二叉查找树。这种特性使得平衡二叉树在数据结构和算法中占有...

    平衡二叉树课程设计 课程设计

    实现平衡二叉树的程序设计通常包括数据结构的定义、插入和删除节点的算法、遍历函数以及平衡调整的逻辑。在设计时,需要考虑如何有效地表示树节点,以及如何高效地执行各种操作。 在进行课程设计时,学生需要理解...

    二叉树和平衡二叉树的C#实现源码

    二叉树和平衡二叉树是数据结构领域中的重要概念,尤其在计算机科学中,它们在数据存储、搜索和排序等方面发挥着...通过阅读和实践这些代码,你将能够更好地掌握二叉树和平衡二叉树的原理以及如何在实际项目中应用它们。

    平衡二叉树c++实现

    总结,C++实现平衡二叉树,尤其是AVL树,需要深入理解二叉树的性质和旋转操作,同时,完善的测试代码是确保代码正确性和可靠性的关键。通过熟练掌握这些知识,可以有效地应用到实际的软件开发项目中,提升数据处理的...

    平衡二叉树的演示操作(c语言)

    本文将详细介绍平衡二叉树的创建、查找、插入、删除、分裂和合并等操作,以及它们的实现方法。 首先,我们要理解平衡二叉树的构造。常见的平衡二叉树有AVL树和红黑树。AVL树是最早被提出的自平衡二叉搜索树,它要求...

    平衡二叉树(纯C++实现)

    平衡二叉树是一种特殊的二叉树数据结构,其特性是左右子树的高度差不超过1,这使得在平衡二叉树中的查找、插入和删除操作的时间复杂度都能保持在O(log n)级别,大大提高了效率。在本项目中,我们将探讨如何使用C++...

    平衡二叉树数据结构课程设计

    平衡二叉树是一种特殊的二叉树数据结构,它在保持二叉查找树特性的同时,通过特定的结构调整策略,确保了树的高度平衡。这样的设计使得在平衡二叉树中执行插入、删除和查找等操作的时间复杂度可以保持为O(log n),...

    平衡二叉树(旋转操作,插入,删除,合并,分裂,凹入表打印)

    在本课程设计中,我们将深入探讨平衡二叉树的核心操作,包括旋转操作、插入、删除、合并、分裂以及凹入表打印。 首先,让我们讨论旋转操作。在平衡二叉树中,当插入或删除节点导致树不平衡时,需要进行旋转来重新...

    数据结构课程设计——平衡二叉树的实现

    5. **拓展功能**:这些可选任务包括打印或遍历树,合并或分裂平衡二叉树,以及保存和加载树的状态。 在概要设计阶段,程序通常分为几个主要模块: - **主函数**:负责整个程序的流程控制,调用其他函数来执行具体...

    平衡二叉树的基本操作

    平衡二叉树是一种特殊的二叉树结构,它的左右子树高度差不超过1,并且左右子树都是平衡二叉树。这种结构在数据处理和搜索算法中具有重要作用,因为它保证了查找、插入和删除等操作的时间复杂度为O(log n)。下面我们...

    平衡二叉树的构造过程教程

    平衡因子是衡量平衡二叉树平衡状态的关键指标,它是左右子树高度差的绝对值。如果一个节点的平衡因子大于1,表示树已经失衡,需要进行调整。 在平衡二叉树的构造过程中,首先,当插入一个新节点时,自该节点向上...

    二叉树 平衡二叉树 平均查找长度

    平衡二叉树(Balanced Binary Tree)是二叉树的一种特殊形式,它的目标是保持树的高度最小,从而确保操作效率。常见的平衡二叉树有AVL树和红黑树等。平衡二叉树的主要优点是确保了在最坏情况下的搜索、插入和删除...

    平衡二叉树的操作演示

    平衡二叉树是一种特殊的二叉树数据结构,它在保持二叉搜索树特性的同时,通过特定的结构调整,确保了左右子树的高度差不超过1。这种平衡特性使得在平衡二叉树上的常见操作如插入、查找、删除等可以以近似O(log n)的...

    广工数据结构课程设计(平衡二叉树的演示)

    1. **数据结构定义**:定义平衡二叉树的节点结构,包括键值、左右子节点以及可能的平衡因子或颜色属性。 2. **基本操作**:实现插入、删除和查找操作。对于AVL树,可能需要检查平衡因子并在必要时执行旋转;红黑树...

Global site tag (gtag.js) - Google Analytics