AVL 树旋转及 JS 实现,平衡树支棱起来~

2022-09-19 10:55:33 浏览数 (1)

这是我参与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

0 人点赞