【算法】二叉树双旋

272 阅读1分钟

通过对一棵不平衡的二叉树进行左旋或者右旋,可以将它变成一棵平衡的二叉树

但是在一些特殊情况除外

举个例子


这显然是一棵不平衡的二叉树,要对他进行右旋

第一步

第二步



继续右旋


可以看出,这棵树依然不平衡
看第三步,6 和 7 那两个节点



6 和 7 这两个节点是一个整体,它们俩无论加到 哪里,都会比隔壁多两层,怎么也达不到平衡

这个时候就需要对二叉树进行双旋操作

所以,当变化分支是唯一最深分支的时候,需要先进行反向的旋转


再进行旋转


二叉树的双旋包括 左右双旋 和 右左双旋

当对某个节点进行左单旋时
如果变化分支是唯一的最深分支,那么我们要对新根进行右单旋
然后再进行左单旋
这样的旋转叫做右左双旋

当对某个节点进行右单旋时
如果变化分支是唯一的最深分支,那么我们要对新根进行左单旋
然后再进行右单旋
这样的旋转叫做左右双旋