平衡二叉树旋转总结

1,220 阅读1分钟

根据插入方式,一共分为四种情况,两种单旋和两种双旋

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

经过各种旋转,二叉树达到平衡状态

灵魂画手下线