AVL树

✍ dations ◷ 2025-11-29 19:46:02 #树结构

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

相关

  • 白部,为汉字索引中的部首之一,康熙字典214个部首中的第一百〇六个(五划的则为第十二个)。就繁体和简体中文中,白部归于五划部首。白部通常是从上、下、左方均可为部字。且无其他
  • 铂族铂系元素是指元素周期表中位于第5及第6周期的8族、9族及10族元素,位在3个铁系元素的下方,包括第5周期的钌、铑、钯和第6周期的锇、铱、铂。铂系元素电子壳层的最外层都只有0到
  • 艾弗里奥斯伍尔德·西奥多·埃弗里(英语:Oswald Theodore Avery,1877年10月21日-1955年2月2日),美国医生、最早的分子生物学家之一、免疫化学先驱,曾长期在纽约市洛克菲勒研究院附属医院
  • 核糖核酸外切酶核糖核酸外切酶(Exoribonucleases)是核糖核酸(RNA)的外切酶,是一种能降解RNA,并在5'端或3'端的核苷酸移除的酶。能移除5'端核苷酸的这种酶称作“5'-3'核糖核酸外切酶”,而能移除3'
  • 超深渊带超深渊区(英文:Hadal zone)的英文名来源于希腊神话中的冥界之王哈迪斯(Hades)的名字,这里也被称为“hadopelagic”区和海沟地带,是海洋中最深的一个地带。该区域的位置在海平面6000
  • 正德正德(元年:1711年—末年:1716年)是日本中御门天皇的年号之一,共使用六年。。正德由《尚书·正义》中用来注《尚书·大禹谟》那句“禹曰:“於!帝念哉!德惟善政,政在养民。火、水、金、
  • 截角五角化六十面体在几何学中,截角五角化六十面体是一种凸多面体,由12个正五边形和60个六边形组成,那60个六边形是全等的,但不是正六边形。截角五角化六十面体共有72个面、210个边和140个顶点,是五
  • 第二次汉城联合国军第二次汉城战役是指1950年9月底联合国军从朝鲜人民军手中收复汉城(今首尔)的战役。在仁川登陆后,联合国军对汉城的进攻十分缓慢且付出了很大的代价。朝鲜人民军派出一
  • 溶度积溶度积(英语:solubility product)是溶度积常数的简称。溶度积常数是沉淀的溶解平衡常数,用符号Ksp表示。溶度积的大小反映了难溶电解质的溶解能力,可用实验方法测定。溶度积常数
  • 吉氏樱莲 (Rock) H.St.John吉氏樱莲(学名:),是夏威夷群岛大岛特有及灭绝的一种植物。该物种仅已知一具于1917年在普纳区(英语:Puna, Hawaii)格伦伍德地区采集到的模式标本,推测其已绝灭。吉