AVL树

✍ dations ◷ 2025-10-09 11:41:33 #树结构

在计算机科学中,AVL树是最早被发明的自平衡二叉查找树。在AVL树中,任一节点对应的两棵子树的最大高度差为1,因此它也被称为高度平衡树。查找、插入和删除在平均和最坏情况下的时间复杂度都是 O ( log n ) {\displaystyle O(\log {n})} 个节点被旋转,而每次AVL旋转耗费固定的时间,所以删除处理在整体上耗费O(log ) 时间。

可以像普通二叉查找树一样的进行,所以耗费O(log )时间,因为AVL树总是保持平衡的。不需要特殊的准备,树的结构不会由于查找而改变。(这是与伸展树搜索相对立的,它会因为搜索而变更树结构。)

假设平衡因子是左子树的高度减去右子树的高度所得到的值,又假设由于在二叉排序树上插入节点而失去平衡的最小子树根节点的指针为a(即a是离插入点最近,且平衡因子绝对值超过1的祖先节点),则失去平衡后进行的规律可归纳为下列四种情况:

在平衡的二叉排序树BBST (Balancing Binary Search Tree)上插入一个新的数据元素e的递归算法可描述如下:

AVL树的调平(Erlang的实现)

 1 balance(null) -> null; 2 balance({null, _, null}=Tree) -> Tree; 3 balance({Left, Value, Right}=Tree) -> 4 	Diff = count(Left)-count(Right), 5 	if (Diff < 2) and (Diff > -2)	->	{balance(Left), Value, balance(Right)}; 6 	   (Diff > 1)				->	balance(rotate_right(Tree)); 7 	   (Diff< -1)				->	balance(rotate_left(Tree)); 8 	   true					->	exit('This is impossible!') 9 	end.10 11 rotate_right({Left, Value, Right}) ->12 	merge_max(Left, {null, Value, Right}).13 14 rotate_left({Left, Value, Right}) ->15 	merge_min(Right, {Left, Value, null}).16 17 merge_min({null, Value, Right}, Tree2) ->18 	{Tree2, Value, Right};19 merge_min({Left, _, _}, Tree2) ->20 	merge_min(Left, Tree2).21 22 merge_max({Left , Value, null}, Tree2) ->23 	{Left, Value, Tree2};24 merge_max({_, _, Right}, Tree2) ->25 	merge_max(Right, Tree2).

AVL节点数计算

高度为h的AVL树,总节点数N最多 2 h 1 {\displaystyle 2^{h}-1} ; 最少节点数 N h {\displaystyle N_{h}} 如以斐波那契数列可以用数学归纳法证明:
N h {\displaystyle N_{h}} = F h + 2 {\displaystyle F_{h+2}} - 1 ( F h + 2 {\displaystyle F_{h+2}} 是斐波那契数列的第h+2项,根据斐波那契多项式得来)。
即:
N 0 {\displaystyle N_{0}} = 0 (表示AVL Tree高度为0的节点总数)
N 1 {\displaystyle N_{1}} = 1 (表示AVL Tree高度为1的节点总数)
N 2 {\displaystyle N_{2}} = 2 (表示AVL Tree高度为2的节点总数)
N h {\displaystyle N_{h}} = N h 1 {\displaystyle N_{h-1}} + N h 2 {\displaystyle N_{h-2}} + 1 (表示AVL Tree高度为h的节点总数)
换句话说,当节点数为N时,高度h最多为 l o g Φ ( 5 ( N + 1 ) ) 2 {\displaystyle log_{\Phi }({\sqrt {5}}*(N+1))-2}

相关

  • 高科技卫星导航系统高科技,或称高技术、高新,指的是最先进的尖端科技。对于高科技来说,并没有什么特别的分类法,到了1960年代,商家为了促销,把只要不是低科技(英语:Low technology)的产品都
  • 阵雨骤雨,又称阵雨,相较于持续整日甚至更久的雨,指的是为时不长的降雨,其强度变化可以很大。骤雨多数由积雨云产生。由于积雨云覆盖的面积不大,积雨云一旦移开后,雨就会停止。骤雨一般
  • 洛泰尔洛泰尔(法语:Lothaire de France,941年-986年3月2日)是西法兰克王国加洛林王朝的倒数第二位国王(954年—986年在位),西法兰克国王路易四世与王后萨克森的格尔贝格之子。他去世后不久
  • BBC自然知性台BBC地球(BBC Earth)是英国广播公司(BBC)的一个收费电视频道,由英国广播公司商业分支(BBC Worldwide)所有和运营,在2015年开始播出。BBC地球主要播出纪实性节目。BBC地球首个播出国家
  • 反共产国际协定反共产国际协定 (又称防共协定,德语:Antikominternpakt,日语:防共協定)是纳粹德国与大日本帝国在1936年11月25日签订的反对共产国际及苏联的协定。此协定后来陆续有其他国家加入。
  • 铁东区铁东区是辽宁省鞍山市下辖的一个市辖区。位于鞍山市的东南部。因位于沈大铁路以东而得名。铁东区是鞍山市的政治、经济、文化中心区。下辖15个街道办事处、2个行政建制镇和2
  • 单关节炎单关节炎(英语:monoarthritis)是一次只有一个关节发炎的关节炎。常见的病因包括:外伤、感染或结晶性关节炎。关节炎发作时,若同时影响到五个或五个以上关节的则称为多关节炎。造
  • 阿尔班·贝尔格阿尔班·马里亚·约翰内斯·贝尔格(德语:Alban Maria Johannes Berg,1885年2月9日-1935年12月24日),奥地利作曲家,出生于奥地利维也纳,也逝于该地,是与勋伯格、韦伯恩齐名的第二维也
  • 光海,成为王的男人《光海,成为王的男人》(朝鲜语:광해, 왕이 된 남자/光海, 王이 된 男子,英语:)是2012年9月13日上映于韩国的古装电影,韩国第7部超过1000万观影人次的本土电影。在第49届大钟奖夺得最
  • 定朔定朔是古代中国阴阳历中,确定每月第一天(初一、朔)的一种计算方法,与平朔相对。这种算法的原则是,将太阳的黄经和月的黄经一致的当天作为每月的初一。因此这种算法考虑了太阳运行