1、AVL平衡树
AVL 平衡树是带有平衡条件的二叉查找树。保证树的深度深度是O(logN),定义一个不平衡的节点的定义是,他的左右子树高度差是2.
当插入一个节点之后,树可能不平衡,假设这个不平衡点是K1,造成这种不平衡的原因可能有以下四个情况:
(1)对K1的左儿子的左子树进行插入。
(2)对K1的左儿子的右子树进行插入。
(3)对K1的右儿子的右子树进行插入。
(4)对K1的右儿子的左子树进行插入。
上述四种情况(1)(4)是镜像的,(2)(3)也是镜像的。因此理论上是四种情况,实际是两种,但是编程角度而言还是四种情况。平衡树的关键是理解如何保持树的平衡,也就是几个节点的指针之间的转换。也就是AVL平衡树中所说的旋转。自己将四种情况手动画出来,思考其中的指针变化。
对于(1)(4)情况只需要执行一次单旋转即可实现树的平衡。对与(2)(3)则需要两次旋转。
下面是代码实现: