AVL树

✍ dations ◷ 2025-12-09 23:01:30 #树结构

在计算机科学中,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}

相关

  • 昆虫见内文昆虫在分类学上属于昆虫纲(学名:Insecta),是世界上最繁盛的动物,已发现超过100万种。其中单鞘翅目(Coleoptera)中所含的种数就比其它所有动物界中的种数还多。昆字原作䖵。昆
  • 国家象征美国国家象征(英语:National Symbols of the United States)指的是那些常常被使用作为美利坚合众国象征的事物。本文中罗列了多种可用作美利坚合众国象征的事物,部分由《美国法
  • 苯妥英钠苯妥英(Phenytoin,或称diphenyl hydantoin),常见商品名大仑丁(Dilantin),是一种抗惊厥药物(英语:anticonvulsant)。该药在治疗强直-阵挛性发作及部分发作(英语:partial seizure)有治疗效果
  • 西印度毁灭述略《西印度毁灭述略》(西班牙语:Brevísima relación de la destrucción de las Indias,另有中文译名《西印度灭亡简史》),由16世纪西班牙多明我会教士巴托洛梅·德拉斯·卡萨斯(B
  • 鲍鱼鲍属(学名:Haliotis),古称鳆、鳆鱼、海耳,又名镜面鱼、九孔螺、明目鱼,是鲍科(Haliotidae)唯一的一个属。它是一类海洋腹足纲软体动物(也就是一种海螺),栖石质河岸,以藻类为食。鲍鱼是中
  • 猫肝吸虫猫肝吸虫(学名:Opisthorchis felineus)是一种吸虫纲寄生虫,可寄生在哺乳类动物的胆管和胆囊,以胆汁为食,可造成肝、胆病变。本物种于1884年首次由Sebastiano Rivolta在北意大利的
  • 智利大学智利大学(西班牙语:Universidad de Chile)是一所设于智利首都圣地亚哥的大学,成立于1843年,是美洲历史最悠久、拉丁美洲最有名望的大学之一。巴黎第三大学  • 巴塞罗那大学  
  • 学阀学阀(がくばつ)指的是在特定的职业或组织中,由某个学校毕业的人们所形成的排他势力。学阀常常会因为规定或是常年的惯例需求,造成组织里的长官通常都是固定某个学校毕业的,而得以
  • 细胞色素b5结构 / ECOD细胞色素b5(英语:Cytochrome b5)是一种存在于动物、植物、真菌以及紫色光养菌中遍及的电子传递血红素蛋白。该细胞色素于微粒体及线粒体中的变体是与膜相结合的,而细
  • 布兰迪科布兰迪科(意大利语:Brandico),是意大利布雷西亚省的一个市镇。总面积8平方公里,人口1651人,人口密度206.4人/平方公里(2009年)。国家统计(ISTAT)代码为017026。