已知
在一颗平衡二叉树上添加一个节点
最坏情况:可能会导致所有祖先节点都失衡
父节点、非祖先节点,都不可能失衡
下面列举了四种出现失衡的情况,分别是LL、RR、LR、RL,指的是新增节点相对于失衡节点的左右子树位置
LL – 右旋转(单旋)
g.left=p.right
p.right=g
让p称为这颗子树的根节点
还需要注意维护:T2、p、g的parent属性
先后更新g、p的高度
RR – 左旋转(单旋)
g.right=p.left
p.left=g
让p称为这颗子树的根节点
还需要注意维护:T1、p、g的parent属性
先后更新g、p的高度
LR – RR左旋转,LL右旋转(双旋)
//n、p先进行RR左旋转
p.right=n.left
n.right=p
//此时转化为中间的树,为LL的情况
//n、g进行LL右旋转
g.left=n.right
n.right=g
RL – LL右旋转,RR左旋转(双旋)
//n、p先进行LL右旋转
p.left=n.right
n.right=p
//此时转化为中间的树,为RR的情况
//n、g进行RR左旋转
g.right=n.left
n.left=g