一步一步写平衡二叉树(AVL树)
来源:互联网 发布:水果软件初学者教程 编辑:程序博客网 时间:2024/05/16 09:19
一步一步写平衡二叉树(AVL树)
作者:C小加 更新时间:2012-8-20
平衡二叉树(Balanced Binary Tree)是二叉查找树的一个进化体,也是第一个引入平衡概念的二叉树。1962年,G.M. Adelson-Velsky 和 E.M. Landis发明了这棵树,所以它又叫AVL树。平衡二叉树要求对于每一个节点来说,它的左右子树的高度之差不能超过1,如果插入或者删除一个节点使得高度之差大于1,就要进行节点之间的旋转,将二叉树重新维持在一个平衡状态。这个方案很好的解决了二叉查找树退化成链表的问题,把插入,查找,删除的时间复杂度最好情况和最坏情况都维持在O(logN)。但是频繁旋转会使插入和删除牺牲掉O(logN)左右的时间,不过相对二叉查找树来说,时间上稳定了很多。
平衡二叉树实现的大部分过程和二叉查找树是一样的(学平衡二叉树之前一定要会二叉查找树),区别就在于插入和删除之后要写一个旋转算法去维持平衡,维持平衡需要借助一个节点高度的属性。我参考了机械工业出版社的《数据结构与算法分析-C语言描述》写了一个C++版的代码。这本书的AVLTree讲的很好,不过没有很完整的去描述。我会一步一步的讲解如何写平衡二叉树,重点是平衡二叉树的核心部分,也就是旋转算法。
第一步:节点信息
相对于二叉查找树的节点来说,我们需要用一个属性二叉树的高度,目的是维护插入和删除过程中的旋转算法。
代码如下:
- 一步一步写平衡二叉树(AVL树)
- 一步一步写平衡二叉树(AVL树)
- 一步一步写平衡二叉树(AVL树)
- 一步一步写平衡二叉树(AVL树)
- 一步一步写平衡二叉树(AVL树)
- 一步一步写平衡二叉树(AVL树)
- 一步一步写平衡二叉树(AVL树)
- 一步一步写二叉平衡树(AVL树)
- 一步一步写平衡二叉树(AVL树)
- 一步一步写平衡二叉树(AVL树)
- 一步一步写平衡二叉树(AVL树)
- 一步一步写平衡二叉树(AVL树)
- 一步一步写平衡二叉树(AVL树)
- 一步一步写平衡二叉树(AVL树)(转载的)
- 平衡二叉树(AVL)
- 平衡二叉树(AVL)
- 平衡二叉树(AVL)
- 一步步写平衡二叉树(AVL树)
- openstack nova api模块分析
- 平衡树(AVL)详解
- memset 和 memcpy
- C#与数据结构--树论--平衡二叉树(AVL Tree)
- sap pp各功能块简单介绍(一)
- 一步一步写平衡二叉树(AVL树)
- jdk与jre的区别
- lua小结
- CentOS6.4安装hadoop2.2.0集群Pass总结
- 创建子类对象调用父类构造器
- erlang 各种数据类型占用的内存大小
- 求二进制数中1的个数
- LightOJ 1136 Division by 3
- c++的快捷键大全