AVL树的单双旋转操作
把必须重新平衡的节点称为å.对于二叉树,å的两棵子树的高度最多相差2,这种不平衡可能有四种情况:
- 对å的左儿子的左子树进行插入节点(左-左)
- 对å的左儿子的右子树进行插入节点(左-右)
- 对å的右儿子的左子树进行插入节点(右-左)
- 对å的左儿子的右子树进行插入节点(右-右)
对于左-左和右-右需要单旋转(single rotation)即可完成调整.对于左-右和右-左则需要双旋转(souble rotation)即可完成调整.




最后show the code:
trait Tree{self=>
import Tree.compare
//AVL树 左左插入节点 左左单旋转
def singleRotateWithLeft:Tree=self match {
case Node(valueK2,leftK2,rightK2)=> leftK2 match {
case Node(valueK1,leftK1,rightK1) =>Node(valueK1,leftK1,Node(valueK2,rightK1,rightK2))
}
}
def singleRotateWithRight:Tree=self match {
case Node(valueK1,leftK1,rightK1) => rightK1 match {
case Node(valueK2,leftK2,rightK2) => Node(valueK2,Node(valueK1,leftK1,leftK2),rightK2)
}
}
//左右插入新节点
def doubleRotateWithLeft:Tree=self match {
case Node(valueK3,leftK3,rightK3) => Node(valueK3,leftK3.singleRotateWithRight,rightK3).singleRotateWithLeft
}
//右左插入数据节点
def doubleRotateWithRight:Tree=self match {
case Node(valueK1,leftK1,rightK1) =>Node(valueK1,leftK1,rightK1.singleRotateWithLeft).singleRotateWithRight
}
}
AVL树的单双旋转操作的更多相关文章
- AVL树的旋转操作详解
[0]README 0.0) 本文部分idea 转自:http://blog.csdn.net/collonn/article/details/20128205 0.1) 本文仅针对性地分析AVL树的 ...
- AVL树旋转
什么是AVL树? AVL树是带有平衡条件的二叉查找树,一颗AVL树首先是二叉查收树(每个节点如果有左子树或右子树,那么左子树中数据小于该节点数据,右子树数据大于该节点数据),其次,AVL树必须满足平衡 ...
- 高度平衡的二叉搜索树(AVL树)
AVL树的基本概念 AVL树是一种高度平衡的(height balanced)二叉搜索树:对每一个结点x,x的左子树与右子树的高度差(平衡因子)至多为1. 有人也许要问:为什么要有AVL树呢?它有什么 ...
- AVL树(三)之 Java的实现
概要 前面分别介绍了AVL树"C语言版本"和"C++版本",本章介绍AVL树的Java实现版本,它的算法与C语言和C++版本一样.内容包括:1. AVL树的介绍 ...
- AVL树(一)之 图文解析 和 C语言的实现
概要 本章介绍AVL树.和前面介绍"二叉查找树"的流程一样,本章先对AVL树的理论知识进行简单介绍,然后给出C语言的实现.本篇实现的二叉查找树是C语言版的,后面章节再分别给出C++ ...
- AVL树(二)之 C++的实现
概要 上一章通过C语言实现了AVL树,本章将介绍AVL树的C++版本,算法与C语言版本的一样. 目录 1. AVL树的介绍2. AVL树的C++实现3. AVL树的C++测试程序 转载请注明出处:ht ...
- AVL树的python实现
AVL树是带有平衡条件的二叉查找树,一般要求每个节点的左子树和右子树的高度最多差1(空树的高度定义为-1). 在高度为h的AVL树中,最少的节点数S(h)由S(h)=S(h-1)+S(h-2)+1得出 ...
- AVL树(平衡二叉查找树)
首先要说AVL树,我们就必须先说二叉查找树,先介绍二叉查找树的一些特性,然后我们再来说平衡树的一些特性,结合这些特性,然后来介绍AVL树. 一.二叉查找树 1.二叉树查找树的相关特征定义 二叉树查找树 ...
- AVL树之 Java的实现
AVL树的介绍 AVL树是高度平衡的而二叉树.它的特点是:AVL树中任何节点的两个子树的高度最大差别为1. 上面的两张图片,左边的是AVL树,它的任何节点的两个子树的高度差别都<=1:而右边的不 ...
随机推荐
- JS的数据类型及转换(还是基础的东西)
朋友说我这是再自娱自乐,我只想说,你说的对
- 漫谈 SLAM 技术(上)
欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 作者:解洪文 导语 随着最近几年机器人.无人机.无人驾驶.VR/AR的火爆,SLAM技术也为大家熟知,被认为是这些领域的关键技术之一.本文对S ...
- Session、Cookie 学习笔记
在开始今天的博文之前首先为自己庆祝一下自己有了三个粉丝,也有了同僚的评论,说实话因为这个开心了好久!哈哈,好了在开始今天的正题之前,首先大家需要了解以下几点: a. HTTP 协议是无状态的协议,WE ...
- JSP6(JSP 指令与JSP 动作元素)
一.JSP指令用来设置整个JSP页面相关的属性 指令可以有很多个属性,它们以键值对的形式存在,并用逗号隔开. JSP中的三种指令标签: Page指令 Page指令为容器提供当前页面的使用说明.一个JS ...
- 在ThinkPHP中使用常量解决路由常规地址不安全传送数据问题
在ThinkPHP搭建项目的同时,会考虑到后期对静态页面的维护问题, 在项目的不断完善的同时,会有大量图片,css文件,以及js文件等一些容易修改.添加.或者删除的资源 如果在中后期对各个静态页面,j ...
- LinuxRPM包安装
转载注明出处:原文地址 ## LinuxRPM包安装 二进制包(RPM包.系统默认包) RPM安装 rpm -ivh 包全名(查询依赖网址:http://www.rpmfind.net) -i(ins ...
- 移动端H5制作安卓和IOS的坑 持续更新...
移动端H5制作安卓和IOS的坑 持续更新... 前言:最近参加公司的H5页面创意竞赛,又遇到不少页面在不同系统上的坑.踩坑之余,觉得很多之前遇到的知识点都忘了,索性开一篇博文,把这些坑都统一归纳起来, ...
- 2、C#基础 - Visual Studio 的版本选择和下载
有句话说:工欲善其事,必先利其器,我不推荐在学习一个语言时使用记事本练习,甚至说相当的排斥.当然了,你也可以选择你自己喜欢的方式.本系列推荐使用的IDE为vs2017 community版,银子不够的 ...
- dubbo源码—SPI
Java中的SPI SPI,Service Provider Interface,java中提供的一种使程序可扩展的方式,系统定义好接口规范,供其他服务提供方实现,服务提供方将自己jar包META-I ...
- 从开源项目看 Python 单元测试
我觉得以前在我开发程序的时候,除了文档,可能单元测试是另外一个让我希望别人都写,但是自己又一点都不想写的东西.但是,随着开发程序的增多,以及自己对 Bug 的修改的增多,我发现,UT 在很大程度上是对 ...