软考考点---平衡二叉树

简介:


浅谈平衡二叉树

 

        平衡二叉树(Balanced binarytree)是由阿德尔森-维尔斯和兰迪斯(Adelson-Velskii and Landis)于1962年首先提出的,所以又称为AVL树。

 

        一、平衡二叉树的基本介绍

 

        定义:平衡二叉树或为空树,或为如下性质的二叉排序树:

        (1)左右子树深度之差的绝对值不超过1;

        (2)左右子树仍然为平衡二叉树.

        平衡因子BF=左子树深度-右子树深度.

        平衡二叉树每个结点的平衡因子只能是1,0,-1。若其绝对值超过1,则该二叉排序树就是不平衡的。

       查找、插入和删除在平均和最坏情况下都是O(log n)。增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。

       如图所示为平衡树和非平衡树示意图:


 

(图一左为非平衡二叉树,图一右图为平衡二叉树)

 

       二、平衡二叉树算法思想

 

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

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

 

       (1)LL型平衡旋转法(右转)

 

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

图二(1

图二(2

 

       (2)RR型平衡旋转法(左转)

 

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

图三(1

 

图三(2

 

       (3)LR型平衡旋转法(先左后右)

 

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

图四(1

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

图四(2

 

       (4)RL型平衡旋转法(先右后左)

 

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

图五(1

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

图五(2

(以上的四种节点包含了所有插入时导致不平衡的情况,图中所示仅仅是平衡树插入后产生的最小不平衡子树)

 

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

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

 

       例:在平衡二叉树中插入一个结点后造成了不平衡,设最低的不平衡结点为A,并且A的左孩子的平衡因子为-1,右孩子的平衡因子为0,则使其平衡的调整方法为(      )

       A.LL型                                                                                                       B.LR型

       C.RL型                                                                                                     D.RR型

 

解:由图四(1)可知答案选B

(个人的一点理解,如有错误还请读者不吝赐教)

目录
相关文章
|
存储 人工智能 编译器
C/C++期末考试复习---知识点+习题
C/C++期末考试复习---知识点+习题
1758 2
|
9月前
|
机器学习/深度学习 算法
【软件设计师】通俗易懂的去了解算法的时间复杂度
【软件设计师】通俗易懂的去了解算法的时间复杂度
|
6月前
|
存储 算法
二叉树进阶-学会层序遍历助你一次刷完leetcode10道题
文章深入探讨了二叉树的层序遍历方法,并展示了如何通过队列实现层序遍历的算法逻辑,同时指出掌握层序遍历技巧可以帮助解决LeetCode上的多道相关题目。
二叉树进阶-学会层序遍历助你一次刷完leetcode10道题
|
9月前
|
存储 算法 编译器
面试 --- C考点
面试 --- C考点
72 0
|
自然语言处理 测试技术 uml
ISTQB考点四
4.测试技术 4.1.测试技术分类 4.1.1. 测试技术分类和特点 黑盒测试技术(也称为行为的或基于行为的技术)基于对适当测试依据的分析(例如:正式 需求文档、规格说明、用例、用户故事或业务流程)。这些技术适用于功能和非功能测试。黑盒测 试技术关注在测试对象的输入和输出,而不考虑其内部结构。 白盒测试技术(也称为结构的或基于结构的技术)基于对架构、详细设计、内部结构或测试 对象代码的分析。与黑盒测试技术不同,白盒测试技术关注在测试对象的结构和处理过程。 基于经验的测试技术利用开发人员、测试员和用户的产品经验来设计、实施和执行测试。这 类技术通常与黑盒和白盒测试技术相结合。 4.2 .
72 1
|
敏捷开发 算法 测试技术
ISTQB考点三
3. 静态测试 3.1.静态测试基础 与动态测试相比,静态测试依赖于软件工作产品的手动检查(即评审),或工具驱动的代码或其 他软件工作产品的评估(即静态分析)。 3.1.1. 由静态测试检查的软件工作产品 代码 模型,如可用于基于模型测试的活动图 3.1.2. 静态测试的好处   静态测试技术提供了多种好处。当在软件开发生存周期的早期应用静态测试,就能够在开展动 态测试之前尽早地检测缺陷(例如,在需求或设计规格说明评审,待办事项列表的细化工作等)。早期发现的缺陷通常比软件开发生存周期后期发现的缺陷经济得多,特别是与软件部署和使用后发现 的缺陷相比。使用静态测试技术来发现缺陷然后及时修复这些缺
50 1
|
敏捷开发 安全 测试技术
ISTQB考点一
1. 软件测试基础 1.1.什么是测试 1.1.1. 典型的测试目标 通过评估工作产品以防止缺陷,例如需求、用户故事、设计和代码 建立对被测对象质量级别的信心 发现缺陷和失效,从而降低软件质量不足的风险 根据被测组件或系统的环境、测试级别和软件开发生存周期模型的不同,测试目标会有所变化。 不同包括:  在组件测试时,尽可能多的发现失效,以便尽早识别和修复潜在的缺陷可能是其一个目标。 而另一个目标可能是增加组件测试时的代码覆盖率。  在验收测试时,确认系统能够按照预期工作并且满足用户需求可能是其一个目标。而另一 个测试目标可能是为利益相关方提供关于在给定时间发布系统的风险信息。 1.
85 0
|
敏捷开发 测试技术 项目管理
ISTQB考点五
5. 测试管理 5.1 测试组织  5.1.1独立测试 测试中的独立程度包括以下几类(独立性从低到高): 没有独立的测试员;唯一可用的测试形式是开发人员测试他们自己的代码 开发团队或项目团队内的独立开发人员或测试员;这可能是开发人员测试他们同事 的产品  组织内的独立测试团队或小组,向项目管理或企业执行管理层报告 来自业务组织或用户团体的独立测试员,或具有特定测试类型的专业知识的测试员, 这些特定测试类型包括,例如易用性、安全性、性能、法规/合规性、或可移植性 组织外部的独立测试员,无论是工作现场(内包)或现场外(外包) 测试独立性的潜在好处包括: 独立的测试员与开发人员相比更可能会识别出不
99 0
|
测试技术 持续交付
ISTQB考点六
6. 测试的支持工具 6.1 测试工具分类 支持测试和测试件管理的工具 (D)表示该测试工具可能更适合开发人员 测试管理工具盒应用生存周期管理工具 需求管理工具 缺陷管理工具 配置管理工具 持续集成工具(D)  支持静态测试的工具 静态分析工具(D) 评审工具 支持测试设计和实施的工具 基于模型的测试工具 测试数据准备工具  支持测试执行和日志记录的工具  测试执行工具(例如:执行回归测试) 覆盖工具(例如:需求覆盖、代码覆盖(D)) 测试用具(D)(又叫测试桩:包含执行测试需要的桩和驱动的测试环境) 支持性能测量和动态分析的工具 性能测试工具 动态分析工具(D) 监视工具   6.2 测试
75 0