AVL树

✍ dations ◷ 2025-07-11 07:02:15 #树结构

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

相关

  • 防晒油防晒霜(英语:sunscreen)是防止皮肤受紫外线晒伤的护肤品。有不同的防御指数SPF(Sun Protection Factor),指在一段情况下可延长避免晒伤的时间。如用SPF4太阳油,则在每平方公分的皮
  • 生命科技生物技术(英语:biotechnology),又称为生物科技,指利用生物体(含动物,植物及微生物的细胞)来生产有用的物质或改进制程,改良生物的特性,以降低成本及创新物种的科学技术。根据不同的工
  • 大宪章《大宪章》(拉丁语:Magna Carta,英语:The Great Charter),又称作《自由大宪章》(拉丁语:Magna Carta Libertatum;英语:The Great Charter of the Liberties)是英格兰国王约翰最初于1215
  • 豹海豹属豹海豹(学名:Hydrurga leptonyx),又称豹形海豹或豹斑海豹,属于海豹科,是豹海豹属的唯一一种。豹海豹在南极地区是仅次于南象海豹的体型第二大的海豹。虎鲸是豹海豹唯一的天敌。豹
  • 安东尼奥·派阿斯安敦宁·毕尤(Antoninus Pius,86年9月19日—161年3月7日,138年—161年在位,又译安东尼·庇护、安托比乌斯·比乌斯、安托尼乌斯·披乌斯,《后汉书》称之为大秦王安敦)为罗马帝国“
  • 黎府黎府(泰语:จังหวัดเลย,皇家转写:Changwat Loei,泰语发音:)是泰国人口密度最低的府之一,位于东北部邻近府(从东起顺时针)依序为廊开府、乌泰他尼府、农磨兰普府、孔敬府、碧
  • 圣克鲁斯加利福尼亚大学圣克鲁兹加利福尼亚大学 (英文:University of California, Santa Cruz;缩写:UCSC),简称圣克鲁兹加大,又常被称为加利福尼亚大学圣克鲁兹分校,是十所加利福尼亚大学之一,位于美国加
  • 冯恩鹤冯恩鹤(1948年4月1日-),出生于辽宁瓦房店,中国大陆男演员,一级演员,因在电视剧《潜伏》中饰演军统天津站站长“吴敬中”而知名。
  • 布什号乔治·H·W·布什号航空母舰(USS George H.W. Bush CVN-77)是一艘美国海军所建造与使用的核动力航空母舰,是尼米兹级核动力航空母舰第十号舰。乔治·H·W·布什号除了是尼米兹
  • 氯酸镁氯酸镁(Magnesium chlorate),化学式Mg(ClO3)2·6H2O。常带有六个结晶水(六水合氯酸镁)。氯酸镁为无色斜方片状或针状结晶。溶于水,微溶于醇、丙酮。通过氯酸钠溶液与氯化镁溶液反