根据插入方式,一共分为四种情况,两种单旋和两种双旋
LL右旋(单旋)
插入N节点,也就是在A的LFFT,LEFT,导致A左右子树高度差大于1,失衡
此时需要右旋
- A.left = B.right
- B.right = A
旋转之后如下
RR左旋(单旋)
插入N节点,也就是在A的RIGHT,RIGHT,导致A左右子树高度差大于1,失衡
此时需要左旋
- A.right = C
- E.left = A
LR左旋+右旋(双旋)
插入N节点,也就是在A的LFFT,RIGHT,导致A左右子树高度差大于1,失衡
可以这么理解,先把BD这条往右插入的,进行左旋转,抵消一个R,这里要注意,因为上面还有一个父节点 A,所以还要维护A
- B.right = N
- D.left = B
- A.left = D (维护父节点A)
这个时候就变成了上面的情况,LL
此时再进行右旋转
- A.left = D.right(此时D的右边没有则是null,这里只是写出通解)
- D.right = A
RL右旋+左旋(双旋)
插入N节点,也就是在A的RIGHT,LFFT导致A左右子树高度差大于1,失衡
此时先进行右旋转
- C.left = D.right
- D.right = C
- A.right = D (维护父节点A)
此时就变成了RR的情况
那进行左旋转即可
- A.right = D.left
- D.left = A
经过各种旋转,二叉树达到平衡状态
灵魂画手下线