AVL树是平衡二叉树,它通过限制左右子树高度差不能超过1来使树尽量达到平衡。
当插入或删除使左右子树高度差超过1时,需要进行适当的调整,所谓调整即对结点进行旋转(左旋转或右旋转)。
红黑树也是平衡二叉树,其规则不一样,但插入或删除违反规则时,同样是通过旋转结点使其满足规则的。对红黑树的讨论可以参详红黑树分析与实现。
(关于下图的说明:结点上方标注的数字0,1,-1,2,-2等数字,表示该结点的[右子树高度-左子树高度]的值。)
AVL树的插入:
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
AVL树的删除:
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
AVL树讨论就到此为止。本想把源码贴出来的,因为老板不准,就没贴了。