平衡树
要记得计算平衡因子。平衡因子为当前节点为根节点的子树的左右子树高度差。
插入、删除都会改变平衡因子。顺着操作的节点向上找到第一个平衡因子大于1的节点,经过的路径即为最小不平衡子树。最小不平衡子树最多只有3个节点。通过如下的旋转可以达到平衡的目的:
单旋
最简单的情况是,子树呈一条直线。
将中间的“拎起来”即可。
双旋
由于搜索树的性质,当不平衡子树出现“弯折”时,直接将中间的“拎起来”会破坏搜索树“左小右大”的性质。此时通过交换,将3个节点中大小处在中间的节点放到中间的位置,再由“左小右大”的性质将弯折的子树伸展平。这样就可以再用一次单旋来得到平衡子树。