数据结构之平衡二叉树
来源:互联网 发布:nfs网络文件系统 编辑:程序博客网 时间:2024/04/28 17:48
平衡二叉树产生的原因
平衡二叉树源于二叉排序树,由二叉排序树的查找算法可知在数据的分布越分散或者说越均匀时,其算法的查找效率(时间复杂度)越好。这里可能不太好理解所谓的二叉排序树的分布情况,请看下图:图一中的二叉排序树的右字数都为空,则此形态下的查找算法的时间复杂度和线性表一致。而图二中的二叉排序树在形态上分布是均匀的则其查找算法的时间复杂度就要由于图一。为了保证二叉排序树不出现极端的情况,因此就提出了平衡二叉树的概念。
概念
平衡二叉树又称为AVL数,它或者是一棵空树或者是具有如下性质的二叉树:它的左右子树都是平衡二叉树,且左、右子树的高度差的绝对值不超过1。所谓的高度差呢,就是深度差。直白的说就像商贩卖水果,多重的水果就用多重的秤砣。一定要保持平衡才可以,不管是买家还是买家都不愿意吃亏的。平衡二叉树旋转
平衡二叉树的插入操作,必定要破坏之前的平衡。秤好的一斤水果,不论你加水果还是加秤砣平衡一定要遭到破坏。那么为了保证其平衡,我们在插入操作后就需要对新的二叉树做一些处理,让二叉树恢复平衡,即旋转。旋转有四种形式,下面就先对应看看实例,之后予以说明。LL型(单向右旋)
RR型(单向左旋)
LR型(先右后左)
RL型(先左后右)
旋转的目的是为了恢复插入的新节点而破坏了的平衡。从图中大概应该能看出来具体的思路。单一旋转理解起来比较简单,就像找一段线段的中点,当线段在哪一边延长中点就会往哪边移动。由此可见,旋转的重点是找到被破坏的平衡点(线段中点),和破坏平衡的子树(线段延长方向)。
然后我们来看看符合型的旋转,以RL型实例为例,插入新节点28时,30这个节点的平衡遭到破坏,其左子树的节点深度为3而右子树深度为1。这时,我们进行单一右旋将中心移到20这个节点,平衡还是被破坏的。这时因为,此时新节点28离20的高度还是为3,也就是说单一右旋并没有改变新节点和中点的高度差。那么我们就需要先对其左旋使得新节点与中心点的高度差为2,然后在此右旋,大功告成了就。
2 0
- 数据结构之平衡二叉树
- 数据结构之 平衡二叉树
- 数据结构之平衡二叉树
- 数据结构之平衡二叉树
- 数据结构之平衡二叉树
- 数据结构之平衡二叉树
- 数据结构之平衡二叉树
- 数据结构之平衡二叉树
- 【数据结构】平衡二叉树之AVL树
- 数据结构之(平衡二叉树)
- 数据结构之平衡二叉树AVL
- 数据结构之红黑树与平衡二叉树
- 数据结构系列之平衡二叉树
- 数据结构之 平衡二叉树的建立
- 数据结构之平衡二叉树(红黑树)
- 数据结构-平衡二叉树之-红黑树
- 数据结构 - 平衡二叉树
- 数据结构: 平衡二叉树
- db2 生产应用监控
- 带成员函数指针的成员函数
- 类扩展(class extension)
- 多福多寿
- aspx页面插入图片到数据库
- 数据结构之平衡二叉树
- 银行存款、取款模型
- 上手!2DX3.0我来啦!先做一个贪吃蛇练练手(第二弹)
- Android 自定义控件属性,自定义Dialog定位
- jquery设为首页,加入收藏代码
- memset的用法
- 不该失去的,一块钱也不放弃
- 判断一条单链表是否有环
- The Decoder - UVa458