计算机考研8,计算机考研每日一练:第八天

平衡二叉树实现原理

平衡二叉树构建的基本思想就是在构建二叉排序树的过程中,每当插入一个结点时,先检查是否因插入而破坏了树的平衡性,若是,则找出最小不平衡子树。在保持二叉排序树特性的前提下,调整最小不平衡子树中各结点之间的链接关系,进行相应的旋转,使之成为新的平衡子树。 下面讲解一个平衡二叉树构建过程的例子。现在又a[10] = {3, 2, 1, 4, 5, 6, 7, 10, 9, 8}需要构建二叉排序树。在没有学习平衡二叉树之前,根据二叉排序树的特性,通常会将它构建成如下左图。虽然完全符合二叉排序树的定义,但是对这样高度达到8的二叉树来说,查找是非常不利的。因此,更加期望构建出如下右图的样子,高度为4的二叉排序树,这样才可以提供高效的查找效率。

16add2141ac30286c6b6e24f4cf2da40.png

现在来看看如何将一个数组构成出如上右图的树结构。 对于数组a的前两位3和2,很正常地构建,到了第个数“1”时,发现此时根结点“3”的平衡因子变成了2,此时整棵树都成了最小不平衡子树,需要进行调整,如下图图1(结点左上角数字为平衡因子BF值)。因为BF为正,因此将整个树进行右旋(顺时针),此时结点2成了根结点,3成了2的右孩子,这样三个结点的BF值均为0,非常的平衡,如下图图2所示。

aae9b38e7571f297ba09bacbff707faa.png

然后再增加结点4,平衡因子没有改变,如上图图3。增加结点5时,结点3的BF值为-2,说明要旋转了。由于BF是负值,对这棵最小平衡子树进行左旋(逆时针旋转),如下图图4,此时整个树又达到了平衡。

61d95de1a2a1d47916c889a0fe180940.png

继续增加结点6时,发现根结点2的BF值变成了-2,如下图图6所示。所以对根结点进行了左旋,注意此时本来结点3是结点3的左孩子,由于旋转后需要满足二叉排序树特性,因此它成了结点2的右孩子,如图7所示。

1928412356277f5021585a9f66e1b5bc.png

增加结点7,同样的左旋转,使得整棵树达到平衡,如下图8和9所示。

cbbba6a2b4567398b4b0a3c6ece62071.png

当增加结点10时,结构无变化,如图10所示。再增加结点9,此时结点7的BF变成了-2,理论上只需要旋转最小不平衡树7、9、10即可,但是,如果左旋转后,结点9变成了10的右孩子,这是不符合二叉排序树的特性的,此时不能简单的左旋。如图11所示。

e38405bb5ac70bb3a797b69845562415.png

仔细观察图11,发现根本原因在于结点7的BF是-2,而结点10的BF是1,也就是说,它们两个一正一负,符号并不统一,而前面的几次旋转,无论左还是右旋,最小不平衡子树的根结点与它的子结点符号都是相同的。这就是不能直接旋转的关键。 不统一,不统一就把它们先转到符号统一再说,于是先对结点9和结点10进行右旋,使得结点10成了9的右子树,结点9的BF为-1,此时就与结点7的BF值符号统一了,如图12所示。

6c1cec4c0542c6f3c6860638032585ed.png

这样再以结点7为最小不平衡子树进行左旋,得到如下图13。接着,插入8,情况与刚才类似,结点6的BF是-2,而它的右孩子9的BF是1,如图14,因此首先以9为根结点,进行右旋,得到图15,此时结点6和结点7的符号都是负,再以6为根结点左旋,最终得到最后的平衡二叉树,如图16所示。

77aae30659550726a97b27919bec1dca.png

通过这个例子,可以发现,当最小不平衡树根结点的平衡因子BF是大于1时,就右旋,小于-1时就左旋,如上例中的结点1、5、6、7的插入等。插入结点后,最小不平衡子树的BF与它的子树的BF符号相反时,就需要对结点先进行一次旋转以使得符号相同后,再反向旋转一次才能够完成平衡操作,如上例中结点9、8的插入时。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/572626.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python全栈开发:web框架们

Python的WEB框架 Bottle Bottle是一个快速、简洁、轻量级的基于WSIG的微型Web框架,此框架只由一个 .py 文件,除了Python的标准库外,其不依赖任何其他模块。 1234pip install bottleeasy_install bottleapt-get install python-bottlewget htt…

jsoup 去除html标签,如何使用jsoup取消注释html标签

Kai Sternad..7对的,这是可能的.以下是解决此问题的一种方法:查找所有评论节点对于每个注释,提取数据属性在当前注释节点之后插入包含数据的新节点删除注释节点看看这段代码:public class UncommentComments {public static void main(String... args) {String htmlIn "&…

软件测试实验二

1.百度搜索seleniumIDE,进入官网http://www.seleniumhq.org/download/下载区下载软件 2.使用seleniumIDE录制脚本,打开IDE,录制脚本,并测试脚本 3.导出脚本,完成实验 转载于:https://www.cnblogs.com/wyp-run/p/661974…

计算机在管理会计应用中的作用,信息化在管理会计中的作用

信息化在管理会计中的作用在管理会计的日常工作中,需要进行大量的数据收集整理工作,会出现漏算错算等情况,加强管理会计软件的创新和研发,从而推进企业会计电算化。摘要:较比以往,信息技术不断发展,在人们的…

基于鸢尾花数据集的逻辑回归分类实践

基于鸢尾花数据集的逻辑回归分类实践 重要知识点 逻辑回归 原理简介: Logistic回归虽然名字里带“回归”,但是它实际上是一种分类方法,主要用于两分类问题(即输出只有两种,分别代表两个类别)&#xff0c…

solr 的 field, copyfield ,dynamic field

Field: Field就是一个字段&#xff0c;定义一个Field很简单&#xff1a; [html] view plaincopy <field name"price" type"sfloat" indexed"true" stored"true"/> 基本上属性也和FieldType类似&#xff0c;他的属性会覆盖掉Fie…

校办研修之计算机培训简报,“2018校本研修培训”第二期学习简报

原标题&#xff1a;“2018校本研修培训”第二期学习简报校训校风&#xff1a;博教风学风&#xff1a;学习提升&#xff0c;共约成长洛阳市第二十六中学2018年校本研修培训学习简报(第二期)素材收集&#xff1a;数学组、物理组、生物组制 作&#xff1a;郭志伟、张志刚时 间&…

struts2中配置文件的调用顺序

1、default.properties 该文件保存在 struts2-core-2.3.7.jar 中 org.apache.struts2中 2、struts-default.xml 该文件保存在 struts2-core-2.3.7.jar 3、struts-plugin.xml 该文件保存在struts-Xxx-2.3.7.jar&#xff08;struts2的插件jar包中&#xff09; 4、struts.xml 该…

计算机教学研究与实践课题研究报告,(高职计算机教学改革与实践研究课题中期报告.doc...

(高职计算机教学改革与实践研究课题中期报告《高职计算机教学改革与实践研究》课题中期报告我院自开展本课题研究工作以来&#xff0c;紧紧围绕“项目教学法”教学的应用问题&#xff0c;积极主动地开展专题研究和教改实验&#xff0c;研究探索新的技术环境下教育教学的新模式和…

Python之路 day1 基础1 变量 for while 用户输入

一、 Python介绍 python的创始人为吉多范罗苏姆&#xff08;Guido van Rossum&#xff09;。1989年的圣诞节期间&#xff0c;吉多范罗苏姆为了在阿姆斯特丹打发时间&#xff0c;决心开发一个新的脚本解释程序&#xff0c;作为ABC语言的一种继承。 最新的TIOBE排行榜&#xff…

九年级计算机上册教学总结,九年级信息技术教学工作总结

眨眼之间&#xff0c;又是工作总结的时刻啦!你对过去一段时间的工作是否有一个清晰的认识呢!下面是出国留学网小编为大家整理的“九年级信息技术教学工作总结”&#xff0c;内容仅供参考&#xff0c;欢迎参阅。想要了解更多关于工作总结的内容&#xff0c;请关注出国留学工作总…

20155302 2016-2017-2 《Java程序设计》第六周学习总结

20155302 2016-2017-2 《Java程序设计》第6周学习总结 教材学习内容总结 Java中的流分为两种&#xff0c;一种是字节流&#xff0c;另一种是字符流&#xff0c;分别由四个抽象类来表示&#xff08;每种流包括输入和输出两种所以一共四个&#xff09;:InputStream&#xff0c;Ou…

找不到tgp饥荒专用服务器,饥荒tgp版专用服务器搭建指南_游侠网

《饥荒》很多玩家购买了tgp版&#xff0c;对于服务器的搭建还不熟悉。下面小编带来《饥荒》tgp版专用服务器搭建指南&#xff0c;一起来看吧。1.创建以下文件夹\\(我的)文档\Klei\\DoNotStarveTogetherRail\MyDediServer\\(我的)文档\Klei\\DoNotStarveTogetherRail\MyDediServ…

elementui源码_Element UI 终于还是来啦

昨天&#xff0c; Element Plus for Vue 3.0 Beta 版本正式发布了&#xff01;对&#xff0c;就是那个被外界传言不再维护的Element UI&#xff01;Element Plus for Vue 3.0 是一个使用 TypeScript Composition API 重构的全新项目。官方团队几乎重写了每一行 代码&#xff0…

复地邮箱服务器地址,打印服务器设置方法

现在很多人会使用打印机&#xff0c;打印机可以帮助我们打印一些资料&#xff0c;但是很多人之前可能没有使用过打印机&#xff0c;因此自己购买了之后发现不会使用&#xff0c;不会设置&#xff0c;今天就为您介绍一下打印服务器安装设置&#xff0c;希望对您有帮助。打印服务…

JS函数表达的几种写法

arguments数组形式的 用于函数 比如不知道参数有多少个或者不固定那么用到argumentsfunction show(){//alert(arguments.;length);alert(arguments[0]);}alert(show(12,3,4));//0角标是12&#xff08;1&#xff09;典型的函数声明function slide(arguments){ //...code/}&…

腐蚀rust研究台抽奖_中石化青岛安工院专家分享延迟焦化装置的腐蚀风险分析!...

延迟焦化装置的腐蚀风险分析李贵军&#xff0c;单广斌(中国石化青岛安全工程研究院)主要内容&#xff1a;对某延迟焦化装置的腐蚀情况进行了描述&#xff0c;根据装置的流程特点、操作条件、设备选材和结构&#xff0c;对装置的腐蚀类型和腐蚀原因进行了分析&#xff0c;提出了…

跟计算机有关的比赛策划,计算机协会“装机大赛”活动策划书

一、大赛目的通过此次大赛&#xff0c;检验参赛同学的计算机组装能力&#xff0c;提高同学们计算机安全意识&#xff0c;加强同学们对计算机的了解。在加快计算机知识在校园内的普及&#xff0c;让更多的同学更熟练地使用计算机的同时&#xff0c;为同学们提供一个充分展示自己…

目标检测如何计算召回率_计算机视觉目标检测的框架与过程

计算机视觉个人接触机器视觉的时间不长&#xff0c;对于机器学习在目标检测的大体的框架和过程有了一个初步的了解&#xff0c;不知道对不对&#xff0c;如有错误&#xff0c;请各位大牛不吝指点。目标的检测大体框架&#xff1a;计算机视觉目标检测分为以下几个步骤&#xff1…

修改wap游戏服务器,修改wap游戏服务器

修改wap游戏服务器 内容精选换一换部署游戏应用前&#xff0c;您需要准备硬件以及华为云的环境&#xff0c;主要包括以下内容&#xff1a;硬件环境&#xff1a;您需要准备一台带有显卡的Windows机器&#xff0c;硬盘至少20G&#xff0c;用于运行游戏客户端。若您不需要运行游戏…