平衡二叉树之AVL树】的更多相关文章

本文根据<大话数据结构>一书及网络资料,实现了Java版的平衡二叉树(AVL树). 平衡二叉树介绍 在上篇博客中所实现的二叉排序树(二叉搜索树),其查找性能取决于二叉排序树的形状,当二叉排序树比较平衡时(深度与完全二叉树相同,[log2n]+1),时间复杂度为O(logn):但也有可能出现极端的斜树,如依照{35,37,47,51,58,62,73,88,91,99}的顺序,构建的二叉排序树就如下图所示,查找时间复杂度为O(n). 图1 斜树 为提高查找复杂度,在二叉排序树的基础上,提出了二叉…
平衡二叉树(AVL树) 二叉排序树问题分析 左子树全部为空,从形式上看更像一个单链表 插入速度没有影响 查询速度明显降低 解决方案:平衡二叉树 基本介绍 平衡二叉树也叫二叉搜索树,保证查询效率较高 它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两棵子树都是一棵平衡二叉树 常用的实现方法有红黑树.AVL.替罪羊树.Treap.伸展树等 平衡二叉树左旋转 使用条件 右子树高度与左子树高度插值大于1的时候,使用左旋转 要求 给定数列{4,3,6,5,7,8},创建对应的平衡二叉树 创…
今天的博客是在上一篇博客的基础上进行的延伸.上一篇博客我们主要聊了二叉排序树,详情请戳<二叉排序树的查找.插入与删除>.本篇博客我们就在二叉排序树的基础上来聊聊平衡二叉树,也叫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…
二叉查找树(BSTree)中进行查找.插入和删除操作的时间复杂度都是O(h),其中h为树的高度.BST的高度直接影响到操作实现的性能,最坏情况下,二叉查找树会退化成一个单链表,比如插入的节点序列本身就有序,这时候性能会下降到O(n).可见在树的规模固定的前提下,BST的高度越低越好. >>平衡二叉树 平衡二叉树是计算机科学中的一类改进的二叉查找树.平衡二叉树具有以下性质: (1)一棵空树是平衡二叉树 (2)如果树不为空,它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉…
平衡二叉树(Balanced Binary Tree)是二叉查找树的一个进化体,也是第一个引入平衡概念的二叉树.1962年,G.M. Adelson-Velsky 和 E.M. Landis发明了这棵树,所以它又叫AVL树.平衡二叉树要求对于每一个节点来说,它的左右子树的高度之差不能超过1,如果插入或者删除一个节点使得高度之差大于1,就要进行节点之间的旋转,将二叉树重新维持在一个平衡状态.这个方案很好的解决了二叉查找树退化成链表的问题,把插入,查找,删除的时间复杂度最好情况和最坏情况都维持在O(…
参考资料 http://www.cnblogs.com/Cmpl/archive/2011/06/05/2073217.html http://www.cnblogs.com/yc_sunniwell/archive/2010/06/27/1766236.html http://www.cnblogs.com/suimeng/p/4560056.html http://blog.csdn.net/gabriel1026/article/details/6311339 http://www.cnb…
今天的博客是在上一篇博客的基础上进行的延伸.上一篇博客我们主要聊了二叉排序树,详情请戳<二叉排序树的查找.插入与删除>.本篇博客我们就在二叉排序树的基础上来聊聊平衡二叉树,也叫AVL树,AVL是发明平衡二叉树的两个科学家的名字的缩写,在此就不做深究了.其实平衡二叉树就是二叉排序树的一种,比二叉排序树多了一个平衡的条件.在一个平衡二叉树中,一个结点的左右子树的深度差不超过1. 本篇博客我们就依照平衡二叉树的特点,在创建二叉排序树的同时要保证结点的左右子树的深度差不超过1的规则.当我们往二叉排序树…
二叉查找树(BSTree)中进行查找.插入和删除操作的时间复杂度都是O(h),其中h为树的高度.BST的高度直接影响到操作实现的性能,最坏情况下,二叉查找树会退化成一个单链表,比如插入的节点序列本身就有序,这时候性能会下降到O(n).可见在树的规模固定的前提下,BST的高度越低越好. 1.平衡二叉树 平衡二叉树是计算机科学中的一类改进的二叉查找树.平衡二叉树具有以下性质: (1)一棵空树是平衡二叉树 (2)如果树不为空,它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树…
AVL树(命名来源于作者姓名,Adelson-Velskii和Landis),即平衡二叉树,满足以下的条件: 1)它的左子树和右子树都是AVL树 2)左子树和右子树的高度差不能超过1 从条件1可能看出是个递归定义. AVL树中任何节点的两个儿子子树的高度最大差别为一,所以它也被称为高度平衡树. AVL树插入节点的步骤,分为2类: 第1类:外侧插入,单旋转 第2类:内侧插入,双旋转(先旋转成外侧插入的情况,再单旋转) 由于调整以后,树高与插入前是相同的,所以无需再向上查看balance情况 代码实…