AVL树 AVL树,也称平衡二叉搜索树,AVL是其发明者姓名简写.AVL树属于树的一种,而且它也是一棵二叉搜索树,不同的是他通过一定机制能保证二叉搜索树的平衡,平衡的二叉搜索树的查询效率更高. AVL树特点 AVL树是一棵二叉搜索树. AVL树的左右子节点也是AVL树. AVL树拥有二叉搜索树的所有基本特点. 每个节点的左右子节点的高度之差的绝对值最多为1,即平衡因子为范围为[-1,1]. 图中红色数字表示对应节点的高度,可以看到同一层的节点高度差都没有超过1. 二叉搜索树的平衡 基础的二叉搜索…
AVL树 在计算机科学中,AVL树是最先发明的自平衡二叉查找树.在AVL树中任何节点的两个子树的高度最大差别为1,所以它也被称为高度平衡树.增加和删除可能需要通过一次或多次树旋转来重新平衡这个树.AVL树得名于它的发明者G. M. Adelson-Velsky和E. M. Landis,他们在1962年的论文<An algorithm for the organization of information>中发表了它. 平衡因子:某结点的左子树与右子树的高度(深度)差即为该结点的平衡因子 AV…
首先,我们应该考虑一个问题,数据库在磁盘中是怎样存储的?(答案写在下一篇文章中) b树.b+树.AVL树.红黑树的区别很大.虽然都可以提高搜索性能,但是作用方式不同. 通常文件和数据库都存储在磁盘,如果数据量大,不一定能全部加载到内存,因此使用b树,一次只加载少量节点数据.其次,b树是多路搜索树,M路的B树最多有M个子节点,通过多路搜索,降低了树的高度,从而在避免内存溢出的情况下减少了内存与磁盘的IO次数,提升了搜索性能. 但是使用b树,数据存储在每一个节点中,搜索时会做局部中序遍历,如果查询多…
在使用二叉搜索树的时候会出现 一个问题,就是树的一条分支会有很多层,而其他的分支却只有几层,就像下面这样: 如果数据量够大,那么我们在某条边上进行增删改查的操作时,就会消耗大量的时间.我们花费精力去构造一个可以提高效率的结构,反而事与愿违.这不是我们想要的.所以,我们需要另外一种树来解决这样的问题,那就是自平衡二叉搜索树--Adelson-Velskii-Landi(AVL).什么意思呢?就是说这种树的任何一个节点左右两侧子树的高度之差最多为1.也就是说这种树会在添加或删除节点时尽量试着成为一棵…
实验7 学号:      姓名:     专业: 7.1实验目的 (1) 掌握顺序表的查找方法,尤其是二分查找方法. (2) 掌握二叉排序树的建立及查找. 查找是软件设计中的最常用的运算,查找所涉及到的表结构的不同决定了查找的方法及其性能.二分查找是顺序表的查找中的最重要的方法,应能充分理解其实现方法和有关性能,并能借助其判定树结构来加深理解.二叉排序树结构在实验时具有一定的难度,可结合二叉树的有关内容和方法来实现. 7.2 实验任务 编写算法实现下列问题的求解. (1) 对下列数据表,分别采用…
AVL树(平衡二叉树): AVL树本质上是一颗二叉查找树,但是它又具有以下特点:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树.在AVL树中任何节点的两个子树的高度最大差别为一,所以它也被称为平衡二叉树.下面是平衡二叉树和非平衡二叉树对比的例图: 平衡因子(bf):结点的左子树的深度减去右子树的深度,那么显然-1<=bf<=1; AVL树的作用: 我们知道,对于一般的二叉搜索树(Binary Search Tree),其期望高度(即为一棵平衡树时)为…
在上篇博客中,学习了二分搜索树:Java数据结构和算法(六)--二叉树,但是二分搜索树本身存在一个问题: 如果现在插入的数据为1,2,3,4,5,6,这样有序的数据,或者是逆序 这种情况下的二分搜索树和链表几乎完全一样,是最不平衡的二叉树了,二分搜索树的效率直接降到最低 如何解决上述问题: 使二分搜索树保持平衡二叉树的特征,而今天要讲述的AVL树是最经典的平衡二叉树了 满二叉树: 除了叶子节点其余节点都有左右两个子节点的树 完全二叉树: 对于一个树高为h的二叉树,如果其第0层至第h-1层的节点都…
今天的博客是在上一篇博客的基础上进行的延伸.上一篇博客我们主要聊了二叉排序树,详情请戳<二叉排序树的查找.插入与删除>.本篇博客我们就在二叉排序树的基础上来聊聊平衡二叉树,也叫AVL树,AVL是发明平衡二叉树的两个科学家的名字的缩写,在此就不做深究了.其实平衡二叉树就是二叉排序树的一种,比二叉排序树多了一个平衡的条件.在一个平衡二叉树中,一个结点的左右子树的深度差不超过1. 本篇博客我们就依照平衡二叉树的特点,在创建二叉排序树的同时要保证结点的左右子树的深度差不超过1的规则.当我们往二叉排序树…
平衡二叉树(AVL树)定义如下:平衡二叉树或者是一棵空树,或者是具有以下性质的二叉排序树: (1)它的左子树和右子树的高度之差绝对值不超过1: (2)它的左子树和右子树都是平衡二叉树. AVL树避免了平衡二叉树初始序列有序建立的类似单链表情况,提高了查找效率. 1.AVL树的相关参量定义 #define _CRT_SECURE_NO_DEPRECATE #include<stdio.h> #include<stdlib.h> #include<windows.h> #d…
今天的博客是在上一篇博客的基础上进行的延伸.上一篇博客我们主要聊了二叉排序树,详情请戳<二叉排序树的查找.插入与删除>.本篇博客我们就在二叉排序树的基础上来聊聊平衡二叉树,也叫AVL树,AVL是发明平衡二叉树的两个科学家的名字的缩写,在此就不做深究了.其实平衡二叉树就是二叉排序树的一种,比二叉排序树多了一个平衡的条件.在一个平衡二叉树中,一个结点的左右子树的深度差不超过1. 本篇博客我们就依照平衡二叉树的特点,在创建二叉排序树的同时要保证结点的左右子树的深度差不超过1的规则.当我们往二叉排序树…