AVL树学习(平衡二叉树)

一、基本概念

AVL树既是平衡二叉树。AVL树的定义首先要求该树是二叉查找树(满足排序规则),并在此基础上增加了每个节点的平衡因子的定义,一个节点的平衡因子是该节点的左子树树高减去右子树树高的值。

===========================================================================

1. 二叉查找树:又称二叉排序树/二叉搜索树,具有以下性质:

(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;

(2)若右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值;

(3)左、右子树也分别为二叉排序树;

(4)没有键值相等的节点。

2. 平衡因子BF:该节点的左子树的深度减去它的右子树深度。(平衡二叉树上所有节点的平衡因子可能是-1,0和1)以图示法讲解吧——

(1)平衡二叉树:此节点往下 左孩子    右孩子    结果5的结点平衡因子就是            3   -   2 =      1;2的结点平衡因子就是            1   -   2 =      -1;4的结点平衡因子就是            1   -   0 =      1;6的结点平衡因子就是            0   -  1 =       -1;叶子结点都是为  0;你在根据平衡二叉树的新得推测 不平衡二叉树的平衡因子;(2)不平衡二叉树:此节点往下 左孩子    右孩子    结果3  的结点平衡因子就是            2   -   4 =      -2;1  的结点平衡因子就是            0   -   1 =      -1;4  的结点平衡因子就是            0   -   3 =      -3;5  的结点平衡因子就是            0   -   2 =      -2;6  的结点平衡因子就是            0   -   1 =      -1;叶子结点都是为  0;
 

===========================================================================

二、为什么要用AVL树呢?

我们先来看看二叉搜索树吧(因为AVL树本质上是一棵二叉搜索树),假设有这么一种极端的情况:二叉搜索树的结点为1、2、3、4、5,也就是:

1

\

2

\

3

\

4

\

5

从这张图里就能很清晰的看出来二叉搜索树其实退化成了一个链表了,也就是说,它在查找上的优势已经全无了。这种情况下,查找一个节点的时间复杂度是O(n)。

那如果是一个AVL树呢?

2

/         \

1            4

/     \

3          5

可以看得出,AVL树的查找平均复杂度是O(log(n))的,也就是说大量随机数据中AVL树表现的要好。(AVL树查找时间复杂度就是树高)

三、AVL树旋转

1. 造成AVL树不平衡的原因可能有以下四点:

(1) 对该结点的左儿子的左子树进行了一次插入。

(2) 对该结点的左儿子的右子树进行了一次插入。

(3) 对该结点的右儿子的左子树进行了一次插入。

(4) 对该结点的右儿子的右子树进行了一次插入。

2. 旋转

由于AVL树需要做到平衡,所以每次插入叶子节点,如果发现不平衡,都需要进行旋转以保持平衡。这里转载了一个图片,描述了AVL树旋转平衡的操作——

附录:学习总结查询链接

1. 百度知道:http://zhidao.baidu.com/link?url=XGjfO9_dDYxgQXlsmHMAthoHTlXp6s1vynqVlnMjIgsIf1yfH2-DxR_O1Ptm5cMXercGywD8kfCn2wYw-a3Xr_

2.

时间: 2024-10-12 15:52:22

AVL树学习(平衡二叉树)的相关文章

AVL树 - 学习笔记

2017-08-29 14:35:55 writer:pprp AVL树就是带有平衡条件的二叉查找树.每个节点的左子树和右子树高度相差最多为1的二叉查找树 空树的高度定为-1 对树的修正称为旋转 对内部的来说是双旋,对外部的调整修正是单旋 ---------------------------------------------------------------------------------------------------------------- 由于一次旋转总能解决问题,因此编写

一步一步写平衡二叉树(AVL树)

平衡二叉树(Balanced Binary Tree)是二叉查找树的一个进化体,也是第一个引入平衡概念的二叉树.1962年,G.M. Adelson-Velsky 和 E.M. Landis发明了这棵树,所以它又叫AVL树.平衡二叉树要求对于每一个节点来说,它的左右子树的高度之差不能超过1,如果插入或者删除一个节点使得高度之差大于1,就要进行节点之间的旋转,将二叉树重新维持在一个平衡状态.这个方案很好的解决了二叉查找树退化成链表的问题,把插入,查找,删除的时间复杂度最好情况和最坏情况都维持在O(

AVL树、红黑树以及B树介绍

简介 首先,说一下在数据结构中为什么要引入树这种结构,在我们上篇文章中介绍的数组与链表中,可以发现,数组适合查询这种静态操作(O(1)),不合适删除与插入这种动态操作(O(n)),而链表则是适合删除与插入,而查询效率则就比较慢了,本文要分享学习的树就是为了平衡这种静态操作与动态操作的差距. 一.二叉查找树 简介 满足下面条件就是二叉查找树 任意节点左子树不为空,则左子树的值均小于根节点的值. 任意节点右子树不为空,则右子树的值均大于于根节点的值. 任意节点的左右子树也分别是二叉查找树. 没有键值

二叉树、二叉搜索树、AVL树的java实现

数据结构一直都是断断续续的看,总是觉得理解的不够深入,特别是对树的理解,一直都很浅显,今儿又看了一遍,来做个总结吧. 首先,树中的一些概念: 1.树的节点包含一个数据元素,以及若干指向其子树的分支.节点拥有的子树的数量称为节点的度.节点的最大层次称为树的深度或高度. 2.二叉树是一种树形结构,其特点是每个节点至多有两棵子树,且子树有左右之分,次序不能随意颠倒. 3.满二叉树:一棵深度为k且有2^k - 1个节点的二叉树,称之为满二叉树. 4.完全二叉树:对一个深度为k,节点个数为n的二叉树,当且

AVL树的JAVA实现及AVL树的旋转算法

1,AVL树又称平衡二叉树,它首先是一颗二叉查找树,但在二叉查找树中,某个结点的左右子树高度之差的绝对值可能会超过1,称之为不平衡.而在平衡二叉树中,任何结点的左右子树高度之差的绝对值会小于等于 1. 2,为什么需要AVL树呢?在二叉查找树中最坏情况下查找某个元素的时间复杂度为O(n),而AVL树能保证查找操作的时间复杂度总为O(logn). 3,AVL树的JAVA代码实现: AVLTree  继承 BinarySearchTree 并改写 添加节点的add方法,在add方法中判断插入元素后是否

关于AVL树的思考

AVL树即平衡二叉树,每个结点有一个平衡因子,即左子树高度减去右子树高.每插入一个结点时,从根部开始按二叉排序树的方法,与节点不断比较,按大小向左右子树插入.在与最后的节点比较后插入时,若有兄弟节点,说明树的高度没有变,此时依然平衡:若没有,则小范围内树高改变了,需回溯,依次更改祖先的平衡因子,若遇到有平衡因子失衡,则,调整,使其与插入之前高度一致,以保证平衡,若未失衡,且平衡因子不变,说明该子树高度未变,停止回溯.——简而言之就是插入后从底开始看有没有影响树高,小树高可能影响大树高,若无波澜则

算法学习笔记 平衡二叉树 AVL树

AVL树是最先发明的自平衡二叉查找树, 其增删查时间复杂度都是 O(logn), 是一种相当高效的数据结构.当面对需要频繁查找又经常增删这种情景时,AVL树就非常的适用.[ 博客地址:http://blog.csdn.net/thisinnocence ] AVL树定义 AVL树诞生于 1962 年,由 G.M. Adelson-Velsky 和 E.M. Landis 发明.AVL树首先是一种二叉查找树.二叉查找树是这么定义的,为空或具有以下性质: 若它的左子树不空,则左子树上所有的点的值均小

数据结构与算法系列----平衡二叉树(AVL树)

一:背景 平衡二叉树(又称AVL树)是二叉查找树的一个进化体,由于二叉查找树不是严格的O(logN),所以引入一个具有平衡概念的二叉树,它的查找速度是O(logN).所以在学习平衡二叉树之前,读者需要了解二叉查找树的实现,具体链接:二叉查找树 那么平衡是什么意思?我们要求对于一棵二叉查找树 ,它的每一个节点的左右子树高度之差不超过1.(对于树的高度的约定:空节点高度是0:叶子节点高度是1.)例如下图: 如果我们的二叉查找树是不平衡该怎么办?进行旋转.经过分析发现,出现不平衡无外乎四种情况,下面我

图解平衡二叉树,AVL树(一)

图解平衡二叉树,AVL树(一) 学习过了二叉查找树,想必大家有遇到一个问题.例如,将一个数组{1,2,3,4}依次插入树的时候,形成了图1的情况.有建立树与没建立树对于数据的增删查改已经没有了任何帮助,反而增添了维护的成本.而只有建立的树如图2,才能够最大地体现二叉树的优点. 在上述的例子中,图2就是一棵平衡二叉树.科学家们提出平衡二叉树,就是为了让树的查找性能得到最大的体现(至少我是这样理解的,欢迎批评改正).下面进入今天的正题,平衡二叉树. AVL的定义 平衡二叉查找树:简称平衡二叉树.由前