3.1 旋转的过程类似于BST寻找继任者的过程,如果树失衡了,需要将根结点及其偏轻的子树与其偏重的子树割; 3.2 偏重的子树会成为新的根,而偏轻的那一根子树,需要在新的根中找到合适的位置插入:
3.2.1 偏轻的那根树,观其方向,理论上只要取代新的根同一个方向的节点,并将被取代的节点插入到取代后的位置即可; 3.2.2 然而有种特殊的现象,新的根走势为’<’或’>’字型,这样的化会死循环,,
为了解决这种现象,先将’<’或’>’转为’'或’/’,这样旋转才能生效;
以上的规则都是由实际的二叉树图表推导的;AVL树基于BST稍微修改即可得到,但是很少用到AVL,每次插入都递归更新向上节点的平衡因子,并且根结点的平衡因子如果大于 | 1 | 的话,还要旋转,性能太低;虽然实现了绝对的平衡,但是带来的性能影响太大; |
左旋和右旋比较抽象,实际上就是在BST寻找继任者的基础上改的
你看那个人好像一条狗啊