这是我参与11月更文挑战的第26天,活动详情查看:2021最后一次更文挑战
上一篇《大小堆解决【数据流中位数】问题,nice 图解~》讲到了 AVL 树,即:自平衡二叉查找树;
此“树”不是一般的“树”!它在 1962 年被发明,作者是 G. M. Adelson-Velsky 和 Evgenii Landis,AVL 树是最早的平衡二叉树实现之一。
本篇将继续探索 AVL 树基础原理,日拱一卒,冲!
推荐阅读:Self-balanced Binary Search Trees with AVL in JavaScript (挖个坑,有空翻译~)
AVL旋转
在 AVL 树中,增加和删除元素的操作则可能需要借由一次或多次 树旋转,以实现树的重新平衡。
所以,AVL树最核心操作就是“AVL 旋转”!
以下 GIF 演示了不断将节点插入AVL树时的情况,包含:
- 左旋(Left Rotation)
- 右旋(Right Rotation)
- 右左旋转(Right-Left Rotation)
- 左右旋转(Left-Right Rotation)
- 以及带子树的右旋(Right Rotation with children)
安利一个在线动态演示 VAL 树的旋转的网站:https://www.cs.usfca.edu/~galles/visualization/AVLtree.html