计算机考研8,计算机考研每日一练:第八天
平衡二叉树实现原理
平衡二叉树构建的基本思想就是在构建二叉排序树的过程中,每当插入一个结点时,先检查是否因插入而破坏了树的平衡性,若是,则找出最小不平衡子树。在保持二叉排序树特性的前提下,调整最小不平衡子树中各结点之间的链接关系,进行相应的旋转,使之成为新的平衡子树。 下面讲解一个平衡二叉树构建过程的例子。现在又a[10] = {3, 2, 1, 4, 5, 6, 7, 10, 9, 8}需要构建二叉排序树。在没有学习平衡二叉树之前,根据二叉排序树的特性,通常会将它构建成如下左图。虽然完全符合二叉排序树的定义,但是对这样高度达到8的二叉树来说,查找是非常不利的。因此,更加期望构建出如下右图的样子,高度为4的二叉排序树,这样才可以提供高效的查找效率。
现在来看看如何将一个数组构成出如上右图的树结构。 对于数组a的前两位3和2,很正常地构建,到了第个数“1”时,发现此时根结点“3”的平衡因子变成了2,此时整棵树都成了最小不平衡子树,需要进行调整,如下图图1(结点左上角数字为平衡因子BF值)。因为BF为正,因此将整个树进行右旋(顺时针),此时结点2成了根结点,3成了2的右孩子,这样三个结点的BF值均为0,非常的平衡,如下图图2所示。
然后再增加结点4,平衡因子没有改变,如上图图3。增加结点5时,结点3的BF值为-2,说明要旋转了。由于BF是负值,对这棵最小平衡子树进行左旋(逆时针旋转),如下图图4,此时整个树又达到了平衡。
继续增加结点6时,发现根结点2的BF值变成了-2,如下图图6所示。所以对根结点进行了左旋,注意此时本来结点3是结点3的左孩子,由于旋转后需要满足二叉排序树特性,因此它成了结点2的右孩子,如图7所示。
增加结点7,同样的左旋转,使得整棵树达到平衡,如下图8和9所示。
当增加结点10时,结构无变化,如图10所示。再增加结点9,此时结点7的BF变成了-2,理论上只需要旋转最小不平衡树7、9、10即可,但是,如果左旋转后,结点9变成了10的右孩子,这是不符合二叉排序树的特性的,此时不能简单的左旋。如图11所示。
仔细观察图11,发现根本原因在于结点7的BF是-2,而结点10的BF是1,也就是说,它们两个一正一负,符号并不统一,而前面的几次旋转,无论左还是右旋,最小不平衡子树的根结点与它的子结点符号都是相同的。这就是不能直接旋转的关键。 不统一,不统一就把它们先转到符号统一再说,于是先对结点9和结点10进行右旋,使得结点10成了9的右子树,结点9的BF为-1,此时就与结点7的BF值符号统一了,如图12所示。
这样再以结点7为最小不平衡子树进行左旋,得到如下图13。接着,插入8,情况与刚才类似,结点6的BF是-2,而它的右孩子9的BF是1,如图14,因此首先以9为根结点,进行右旋,得到图15,此时结点6和结点7的符号都是负,再以6为根结点左旋,最终得到最后的平衡二叉树,如图16所示。
通过这个例子,可以发现,当最小不平衡树根结点的平衡因子BF是大于1时,就右旋,小于-1时就左旋,如上例中的结点1、5、6、7的插入等。插入结点后,最小不平衡子树的BF与它的子树的BF符号相反时,就需要对结点先进行一次旋转以使得符号相同后,再反向旋转一次才能够完成平衡操作,如上例中结点9、8的插入时。
计算机考研8,计算机考研每日一练:第八天相关推荐
- 计算机二级7月考试,2020年计算机二级MS Office考试每日一练(7月27日)
[摘要] 小编整理了2020年计算机二级MS Office考试每日一练(7月27日)的相关内容,下面一起来看看2020年计算机二级MS Office考试每日一练(7月27日)的具体内容吧,希望能够帮助 ...
- 计算机二级7月考试,2020年计算机二级MS Office考试每日一练(7月15日)
[摘要] 小编整理了2020年计算机二级MS Office考试每日一练(7月15日)的相关内容,下面一起来看看2020年计算机二级MS Office考试每日一练(7月15日)的具体内容吧,希望能够帮助 ...
- 在实际使用中 mysql所支持的触发器有_计算机二级考试MySQL数据库每日一练 12月26日...
1.使用SELECT将表中数据导出到文件,可以使用哪一子句?D A.TO FILE B. FILE C.OUTTO FILE D. 2.存储程序中不是循环语句是( ) A.REPEAT B.WHILE ...
- java将naso注册成计算机服务_2018计算机二级考试Java语言每日一练 8月2日
1.软件测试的目的是 A.评估软件可靠性 B.发现并改正程序中的错误 C.改正程序中的错误 D.发现程序中的错误 2.软件测试的目的是 A.评估软件可靠性 B.发现并改正程序中的错误 C.改正程序中的 ...
- 关于select的描述计算机,计算机二级考试MySQL数据库每日一练 12月21日
单项选择题 1.SQL语句中修改表结构的命令是( ). A.MODIFY TABLE B.MODIFY STRUCTURE C.ALTER TABLE D.ALTER STRUCTURE 2.通过以下 ...
- 计算机组成原理 启航教育,2021计算机考研:计算机组成原理知识点CPU的功能和基本结构...
启航教育小编为大家整理了关于"2021考研:计算机组成原理知识点CPU的功能和基本结构"的相关内容,希望可以帮助到大家,祝大家考上自己理想的院校 CPU的功能和基本结构 CPU主要 ...
- 北交大计算机在职非全考研初试心得
2019 年 2 月 12 日,我正式踏上了考研之路,报考的是北京交通大学计算机学院电子信息软件工程方向(非全日制).初试成绩 322,超去年分数线 50 多分,目前正在准备复试.闲暇之余,我想把初试 ...
- 计算机专业考研二战,2019计算机考研二战考生考研数学要规避的三个误区
以下是新东方在线整理的2019计算机考研二战考生考研数学要规避的三个误区,请参考: 一.看中速度,看中数量 众所周知,考研数学要想得高分,需要考生练习一定数量的题目.有些考生在做题的过程中,喜欢跟周围 ...
- 2021计算机专业课考研大纲,2021考研计算机大纲原文:操作系统
2021考研大纲已经发布,知道各位同学已经按捺不住激动的心情了,考研大纲是考研复习的指向标,小编第一时间为大家整理了2021考研计算机大纲部分原文,操作系统部分考查内容,供大家参考. 操作系统 [考查 ...
- 计算机组成原理名词解释常用,2018考研408计算机组成原理名词解释(3)
2018考研408计算机组成原理名词解释(3) 2017-09-29 16:02 | 考研集训营 随着时代的快速发展,任何行业都离不开网络,导致计算机行业近几年非常的火热,使各大高校竞相争抢优秀人才, ...
最新文章
- window document树
- 【划分树】 POJ 2104 HDU 2665 K-th Number 裸题
- C#操作Excel时,Excel常用的方法和属性zz
- Js选择框脚本 移动操作select 标签中的 option 项的操作事项
- 16-CoreData之多表关联(存储自定义数据模型)
- 函数不可访问_关于可重入函数
- IISASP.NET 站点IP跳转到域名
- Objective-C 的动态提示和技巧
- omwin密立根油滴实验数据处理程序_哈工程最新大物实验报告29——磁场的测量...
- Crontab使用心得
- 奥特曼传奇英雄存档丢了怎么找回_热血传奇复古传奇:传奇游戏手机版竟然比端游还火爆?你觉得呢?...
- 2018年双十一:计算机品类纸质书籍销量冠军
- 云服务器保存文件,云服务器保存文件命令
- 提取频散曲线matlab程序,2.2 PCDISP圆柱杆频散曲线求解
- Springboot 中类不能使用@Value注解从yml中加载值
- 上海高考物理能不能用计算机,上海高考物理卷并未超纲 但不按套路出牌
- WebBrowser怎么指定ie内核
- 怪物的生成 攻击和掉落金币
- 中国版权保护中心注册流程(含实名认证)
- 使用PicGo配置七牛云图床(图文步骤详细)
热门文章
- ENSP配置 实例二 单臂路由配置
- 大学计算机一级b笔记,全国计算机等级一级B Excel考试整理笔记
- c++输入错误重新输入_C程序-根据时长和时薪计算工资1.3(解决输入非数字选项退出的bug)...
- 河南大学计算机与信息工程学院张磊,张磊-食品与生物工程学院
- git安装 perl ubuntu_ubuntu下安装git
- 【OpenCV 例程200篇】61. 导向滤波(Guided filter)
- access inner join 数据类型不匹配_用Access开发生产管理系统
- 代码整理工具_整理了 11 个好用的代码质量审核和管理工具
- uniapp 输入框防抖节流_拉动一下控制台大小,后台请求数量爆炸,竟是没做好防抖与节流...
- 计算机基础word-常见问题