AVL树是高度平衡的二叉树,任何节点的两个子树的高度差别<=1

实现AVL树

定义一个AVL树,AVLTree,定义AVLTree的节点内部类AVLNode,节点包含以下特性:

1.key——关键字,对AVL树的节点进行排序

2.left——左子树

3.right——右子树

4.height——高度

如果在AVL树插入节点后可能导致AVL树失去平衡,具体会有四种状态:

LL:左左,LeftLeft

LR:左右,LeftRight

RL:右左,RightLeft

RR:右右,RightRight

解决上面的情况

解决LL,需要左单旋转

解决RR,需要右单旋转

解决LR,需要先右单旋转,再左单旋转

解决RL,需要先左单旋转,再右单旋转

实现左单旋转

k1,k2

k2的left给k1

k1的right给k2的left

k2给k1的right

实现右单旋转

k1,k2

k1的right给k2

k2的left给k1的right

k1给k2的left

节点的高度,是它左子树或者右子树中,高度大的那个 再加1

/**
* AVL树测试
* @author taoshihan
* @param <T>
*
*/
public class AVLTree<T extends Comparable<T>> {
private AVLNode mRoot;//根节点
class AVLNode<T extends Comparable<T>>{
private T key;//键值
private int height;//高度
private AVLNode left;//左子树
private AVLNode right;//右子树
public AVLNode(T key,AVLNode left,AVLNode right) {
this.key=key;
this.left=left;
this.right=right;
this.height=0;
}
}
/**
* 获取节点高度
* @param tree
* @return
*/
public int height(AVLNode<T> tree){
if(tree!=null){
return tree.height;
}
return 0;
}
/**
* 取出左右子树中高的那个
* @param a
* @param b
* @return
*/
public int maxHeight(int a,int b){
return a>b ? a : b;
}
/**
* 左单旋转
* @param k2
* @return
*/
public AVLNode<T> leftLeftRotation(AVLNode<T> k2){
AVLNode k1;
k1 = k2.left;
k2.left=k1.right;
k1.right=k2;
k2.height=maxHeight(height(k2.left), height(k2.right));
k1.height=maxHeight(height(k1.left), height(k1.right));
return k1;
}
/**
* 右单旋转
* @param k2
* @return
*/
public AVLNode<T> rightRightRotation(AVLNode<T> k1){
AVLNode k2;
k2=k1.right;
k1.right=k2.left;
k2.left=k1; k2.height=maxHeight(height(k2.left), height(k2.right));
k1.height=maxHeight(height(k1.left), height(k1.right));
return k2;
}

[javaSE] 数据结构(AVL树基本概念)的更多相关文章

  1. 再回首数据结构—AVL树(二)

    前面主要介绍了AVL的基本概念与结构,下面开始详细介绍AVL的实现细节: AVL树实现的关键点 AVL树与二叉搜索树结构类似,但又有些细微的区别,从上面AVL树的介绍我们知道它需要维护其左右节点平衡, ...

  2. 数据结构 - AVL 树

    简介 基本概念 AVL 树是最早被发明的自平衡的二叉查找树,在 AVL 树中,任意结点的两个子树的高度最大差别为 1,所以它也被称为高度平衡树,其本质仍然是一颗二叉查找树. 结合二叉查找树,AVL 树 ...

  3. 数据结构-AVL树的旋转

    http://blog.csdn.net/GabrieL1026/article/details/6311339 平衡二叉树在进行插入操作的时候可能出现不平衡的情况,AVL树即是一种自平衡的二叉树,它 ...

  4. 简单数据结构———AVL树

    C - 万恶的二叉树 Crawling in process... Crawling failed Time Limit:1000MS     Memory Limit:32768KB     64b ...

  5. JAVA数据结构--AVL树的实现

    AVL树的定义 在计算机科学中,AVL树是最先发明的自平衡二叉查找树.在AVL树中任何节点的两个子树的高度最大差别为1,所以它也被称为高度平衡树.查找.插入和删除在平均和最坏情况下的时间复杂度都是.增 ...

  6. 数据结构--Avl树的创建,插入的递归版本和非递归版本,删除等操作

    AVL树本质上还是一棵二叉搜索树,它的特点是: 1.本身首先是一棵二叉搜索树.   2.带有平衡条件:每个结点的左右子树的高度之差的绝对值最多为1(空树的高度为-1).   也就是说,AVL树,本质上 ...

  7. 再回首数据结构—AVL树(一)

    前面所讲的二叉搜索树有个比较严重致命的问题就是极端情况下当数据以排序好的顺序创建搜索树此时二叉搜索树将退化为链表结构因此性能也大幅度下降,因此为了解决此问题我们下面要介绍的与二叉搜索树非常类似的结构就 ...

  8. 第三十二篇 玩转数据结构——AVL树(AVL Tree)

          1.. 平衡二叉树 平衡二叉树要求,对于任意一个节点,左子树和右子树的高度差不能超过1. 平衡二叉树的高度和节点数量之间的关系也是O(logn) 为二叉树标注节点高度并计算平衡因子 AVL ...

  9. Java数据结构——AVL树

    AVL树(平衡二叉树)定义 AVL树本质上是一颗二叉查找树,但是它又具有以下特点:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树,并且拥有自平衡机制.在AV ...

随机推荐

  1. Java按位取反运算符“~”的工作原理

    说明:本文参考了文章<Java按位取反运算符“~”>,链接:https://blog.csdn.net/smilecall/article/details/4245447 补充:位运算符( ...

  2. vue 生命周期 笔记

    生命周期:一个组件从创建到销毁的这个过程叫做生命周期 生命周期钩子函数   1.组件从创建到销毁的过程 1.创建前 创建后 2.挂载前 挂载后 3.更新前 更新后 4.销毁前 销毁后 beforeCr ...

  3. Python面向对象(定义类和创建对象)

    day24 http://www.cnblogs.com/wupeiqi/p/4493506.html Python:函数式+面向对象,函数式编程可以做所有事,但是不一定合适. 小明,10岁,男,上山 ...

  4. Struts2的优点与Struts1的区别:

    单实例与多实例有状态就是有数据存储功能,比如购物车,买一件东西放进去,可以再次购买或者删减.无状态就是一次操作,不能保存数据. 有状态对象,就是有成员属性的对象,可以保存数据,是非线程安全的.无状态对 ...

  5. delphi 10.2 ----简单的叠乘例子

    unit Unit11; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, Syste ...

  6. jquery text html width heigth的用法

    <body> <div id="div1"> <h3>我是标题</h3> </div> <div id=" ...

  7. springboot第四篇:debug模式开发运用

    前提:项目是以maven project结构建立的,现状是无法进行断点调试的.怎么才能在eclipse里进行调试呢? 需要:①将项目打包部署到tomcat ②往项目加入dynamic web modu ...

  8. bzoj4361:isn(dp+容斥+树状数组)

    题面 darkbzoj 题解 \(g[i]\)表示长度为\(i\)的非降序列的个数 那么, \[ ans = \sum_{i=1}^{n}g[i]*(n-i)!-g[i+1]*(n-i-1)!*(i+ ...

  9. HDU - 4630 离线处理区间点对问题

    题意:给定\(a[1...n]\),多次询问\([L,R]\)中的任意一对数使得\(gcd(a_i,a_j)\)最大 对于gcd,区间内至少存在两个相同的因子才能作为合法的解,存在两个相同因子且最大就 ...

  10. 思科设备配置DHCP服务

    路由器,三层交换机都是可以做DHCP服务的,下面以Cisco 3750G-24TS-S为例配置DHCP服务,指令如下: ip dhcp pool DHCP-Server network 192.168 ...