1、搜索二叉树可能会出现一边树很长另一边树很短的极端情况,这样的话二叉树就会退化,这时我们就引出了AVL树这样的改良版。AVL树会控制两端树的高度差的绝对值小于1。(一般为右数高度减左树高度)
2、AVL树会通过平衡因子来控制,因为是右-左,所以插入左边平衡因子--,右边则++
3、基本结构:
其中_parent是用来找上一节点进行链接
控制AVL的行为:
其中除了插入函数其余函数与搜索二叉树相似。
4、插入函数:
左单旋:
这里子树的高度为h,h分为0和>=1
h==1:
h>=1
转完后,改变parent节点,若subRL为空则不链接parent,不为空则链接
还有parent的parent为空则:
若不为空,parent在其父节点的左则向左链接,右同理:
更新平衡因子:
右单旋:
与左单旋相似:
平衡因子的更新: