AVL树

✍ dations ◷ 2024-09-20 17:43:28 #树结构

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

相关

  • 舒张压血压是指血管内的血液在单位面积上的侧压力,即压强。习惯以毫米汞柱(mmHg)为单位。而动脉血压则指的是血液对动脉血管的压力,一般指主动脉压。而平均血压则是 = (收缩压+ 2 x 舒
  • 诸圣节诸圣节(英语:All Saints' Day,拉丁语:Sollemnitas Omnium Sanctorum,希腊语:Άγιοι Πάντες),又称诸圣日、万圣节,是天主教、圣公宗和东正教都有的节日。在天主教会和圣公会
  • 陈凯先陈凯先(1945年8月28日-),祖籍江苏南京,出生于重庆,药物化学家,上海中医药大学校长。主要从事计算机辅助药物设计领域的研究。陈凯先于1967年毕业于复旦大学放射化学专业。1978年进
  • 三清道祖三清,即玉清、上清、太清,原本指“三清境”:太清境大赤天,上清境禹余天,玉清境清微天,位于道教天界“种民天”之上。后来指称三清尊神,玉清之主元始天尊,上清之主灵宝天尊,太清之主道
  • 高雄牛乳大王高雄牛乳大王是发源于台湾高雄的连锁餐厅,由锺文梁创立于1966年。高峰期曾在台湾各地拥有26家直营分店。原本在华王饭店对面摆摊贩售木瓜牛奶;其首家店面位于盐埕区的五福四路
  • 国家奈米元件实验室国家奈米元件实验室,英名名称为National Nano Device Laboratories, NDL,简称为奈米实验室,位于新竹市科学工业园区旁,隶属于财团法人国家实验研究院,为台湾培育半导体与奈米科技
  • 信风赤道低压带信风带副热带高压带西风带副极地低压带极地东风带极地高压带信风,又称贸易风,指的是在低空从副热带高压带吹向赤道低压带的风,北半球吹的是东北信风,而南半球吹的是东
  • span class=nowrapTl(NOsub3/sub)sub3/sub/span硝酸铊(III)是一种无机化合物,化学式为Tl(NO3)3。它通常以三水合物的形式存在。它是无色固体,剧毒。它是一种强氧化剂——其分子内的三价铊和硝酸根离子都有氧化性。它受热分解,
  • 奥本尼市奥尔巴尼(英语:Albany)是美国纽约州首府,也是纽约州奥尔巴尼县县治所在地。1686年取得特许状,1797年成为州府。奥尔巴尼位于哈德逊河畔,距纽约、波士顿的路程几乎成一个等边三角形
  • 东格林斯特德镇足球会东格林斯特德镇足球会(East Grinstead Town F.C.)是一支位于英格兰东格林斯特德的职业足球会,目前于英格兰足球依斯米安联赛甲组南区角逐。