AVL树是每个结点的左子树和右子树的高度最多差1的二叉查找树(空树的高度定义为-1)。

它能保持二叉树的高度平衡,尽量降低二叉树的高度,减少树的平均搜索长度。

AVL树的性质

  • 左子树和右子树的高度差不超过1
  • 每个结点的左子树和右子树都是AVL树
  • 每个结点都有一个平衡因子,任一结点的平衡因子是-1,0,1。每个结点的平衡因子等于右子树高度减去左子树的高度

AVL树是在二叉查找树的基础上建立的,我们知道二叉查找树在最坏情况下(每个结点只有左子树或右子树)增删查的时间复杂度是O(N),这种极端的情况下树是高度不平衡的。

在二叉查找树的基础上,如果使左右子树的高度差不超过1,即达到高度平衡的状态,此时增删查的时间复杂度为O(logN)(2为底数)。

为了让它保持高度平衡,我们引入了平衡因子,每个结点的平衡因子只可能是-1,0,1中的一个。

每次插入/删除一个结点,我们都需要向上更新一下新增结点/删除结点的祖先的平衡因子。一旦发现某个祖先的平衡因子变为2或者-2,我们就需要通过旋转来使这棵树保持AVL树的特性。

转载于:https://www.cnblogs.com/i-hard-working/p/10749998.html

AVL树---平衡的二叉查找树相关推荐

  1. AVL树平衡旋转详解

    AVL树平衡旋转详解 概述 AVL树又叫做平衡二叉树.前言部分我也有说到,AVL树的前提是二叉排序树(BST或叫做二叉查找树).由于在生成BST树的过程中可能会出现线型树结构,比如插入的顺序是:1, ...

  2. 一文读懂 AVL 树

    背景 AVL 树是一棵平衡的二叉查找树,于 1962 年,G. M. Adelson-Velsky 和 E. M. Landis 在他们的论文<An algorithm for the orga ...

  3. DSA 经典数据结构与算法 学习心得和知识总结(四) | AVL树

    AVL树 从BST的角度看AVL AVL的定义及性质 AVL树的结构定义 AVL树的旋转算法 左左情况---右旋 右右情况---左旋 左右情况---左右旋 右左情况---右左旋 AVL树的遍历操作 A ...

  4. 纸上谈兵: AVL树

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 二叉搜索树的深度与搜索效率 我们在树, 二叉树, 二叉搜索树中提到,一个有n个节点 ...

  5. Linux内核之于红黑树and AVL树

    为什么Linux早先使用AVL树而后来倾向于红黑树?        实际上这是由红黑树的实用主义特质导致的结果,本短文依然是形而上的观点.红黑树可以直接由2-3树导出,我们可以不再提红黑树,而只提2- ...

  6. 【数据结构与算法】AVL树的Java实现

    前情提要 之前只写了一些AVL树核心算法,这里给出一个AVL树的完整实现. AVL树是平衡查找二叉树,不仅能避免二叉搜索树出现斜树的状况,更是能保持比较标准的O(log2N),但AVL树可能需要很多次 ...

  7. 【大话数据结构C语言】57 平衡二叉树(AVL树)

    欢迎关注我的公众号是[CodeAllen],关注回复[1024]获取精品学习资源 程序员技术交流①群:736386324 ,程序员技术交流②群:371394777 平衡二叉排序树 平衡二叉树是一种二叉 ...

  8. C++AVL树(自平衡二叉查找树)(附完整源码)

    C++AVL树自平衡二叉查找树 node结构体定义 实现了以下几个接口 AVL树(自平衡二叉查找树)算法的完整源码(定义,实现,main函数测试) node结构体定义 typedef struct n ...

  9. AVL树-自平衡二叉查找树(Java实现)

    在计算机科学中,AVL树是最先发明的自平衡二叉查找树.AVL树得名于它的发明者 G.M. Adelson-Velsky 和 E.M. Landis,他们在 1962 年的论文 "An alg ...

最新文章

  1. php微信开发例子,微信开发实战之知乎日报
  2. 自我小结--工作、学习、编码
  3. [原]调试实战——程序CPU占用率飙升,你知道如何快速定位吗?
  4. mysql 8.0.25 取巧解决修改密码报错问题
  5. Java Protected 解读
  6. 2021了,不会还有测试人员认为Jmeter就等于性能测试吧!
  7. 在LaTeX中使用BibTeX时的一个问题及其解决:编译PDF不随bib文件更新
  8. nmap +shell脚本实现内网端口巡检
  9. ajax实现文件表单上传,ajax文件异步实现表单上传
  10. 学计算机需要会拼音吗,计算机学习拼音
  11. 金仓数据库 KingbaseGIS使用手册(2. 简介)
  12. 虚拟机VMware官网下载教程,中文详细步骤(图文)
  13. 获取某年某月的第一天是星期几
  14. 制作3D实时交互影像产品,需要用到的技术和软件!
  15. java halt_System.exit和Runtime halt区别
  16. 【OSPF外部路由-4类LSA(sum-asbr)和5类LSA(external)以及7类LSA(Nssa)】(OSPF的特殊区域)(外部路由选路特性)
  17. 绘制一只奥特曼DIY
  18. Ambari2.7+HDP3.0安装(基于Centos7)
  19. 全球主要高光谱遥感卫星介绍
  20. Linux下对文件权限的管理

热门文章

  1. Extjs4 MVC 示例
  2. ROS系统 C++或Python实现订阅者Subscriber
  3. SFTP Net Drive
  4. 回顾inputstream和outputstream
  5. Android 项目,没有可运行的Module项
  6. Coursera, Big Data 1, Introduction (week 3)
  7. 欧洲安全研究人员:黑客是如何泄露加密电子邮件
  8. Spring @EventListener 异步中使用condition的问题
  9. Hadoop 之Pig的安装的与配置之遇到的问题---待解决
  10. 【Silverlight】汉诺塔游戏,带AI