lihongjie0209 / myblog

4 stars 0 forks source link

AVL Tree #176

Open lihongjie0209 opened 4 years ago

lihongjie0209 commented 4 years ago

在计算机科学中,AVL树是最早被发明的自平衡二叉查找树。在AVL树中,任一节点对应的两棵子树的最大高度差为1,因此它也被称为高度平衡树。查找、插入和删除在平均和最坏情况下的时间复杂度都是{\displaystyle O(\log {n})}O(\log{n})。增加和删除元素的操作则可能需要借由一次或多次树旋转,以实现树的重新平衡。AVL树得名于它的发明者G. M. Adelson-Velsky和Evgenii Landis,他们在1962年的论文《An algorithm for the organization of information》中公开了这一数据结构。

节点的平衡因子是它的左子树的高度减去它的右子树的高度(有时相反)。带有平衡因子1、0或 -1的节点被认为是平衡的。带有平衡因子 -2或2的节点被认为是不平衡的,并需要重新平衡这个树。平衡因子可以直接存储在每个节点中,或从可能存储在节点中的子树高度计算出来。

lihongjie0209 commented 4 years ago

image

lihongjie0209 commented 4 years ago

代码实现技巧

把所有的节点都列出来

n5 = .. n2 = ...

a = ...

......

然后把之前的连接都删除掉

n5.left = null n5.right = null .....

按照结果重新连接

n3.left = n1 n3.right = n5

n2.left =d n2.right = c

n5.left = b

n5.right = a

最后返回新的root