『数据结构与算法』AVL树(平衡二叉树)
GitHub源码分享 微信搜索:码农StayUp 主页地址: https://gozhuyinglong.github.io 源码分享: https://github.com/gozhuyinglong/blog-demos 1. AVL树 AVL(Adelson-Velskii 和 Landis)树是带有平衡条件的 二叉查找树 ,又叫做平衡二叉树。在AVL树中任何节点的两个子树高度差最多为1,所以它又被称为高度平衡树。 如下图中可以清晰的看出,左边的树其根节点左子树高度为3,右子树高度为2,符合AVL树的特点;而右边的树其根节点左子树高度为3,右子树高度为1,不符合AVL树的特点。因此左边的树为AVL树,右边的树不是AVL树。 那么怎样才能保持这种平衡呢? 答案便是在插入或删除节点时,通过对树进行简单的修正来保持平衡,我们称之为 旋转 。 2. 旋转(rotation) 旋转分为单旋转(single rotation)和双旋转(double rotation)。 当左右子树的高度差超过1,并且最高的叶子节点在“外边”时,使用单旋转。 当左右子树的高度差超过1,并且最高的叶子节点在“里面”时,使用双旋转。 而单旋转又分为: 左旋转,即向左旋转。当右子树的高度大于左子树时,进行左旋转。 右旋转,即向右旋转。当左子树的高度大于右子树时,进行右旋转。 双旋转又分为: 左-右双旋转