平衡二叉树的手动调整方法
看书左旋右旋看着懵逼,不懂往左旋转往右旋转到底是怎么个旋转法。
总结了一个万能的手动调整方法,不用记忆什么LL,LR,RL,RR的形式,通吃。
当新插入一个节点,导致不平衡,进行手动调整。
步骤有四步:
1。找到最小不平衡子树(和其根节点)
2。从根节点出发,沿插入路径找三个节点。
3。调整这三个节点。(找出中位数,让中位数作为根节点,其余两个一左一右)
4。剩下的节点,左右子树的位置保持不变,再找到最后一个节点的插入位置。
(1)先以三个节点的情况演示,假设插入了15,3,7,出现不平衡。
最小不平衡子树就是三个节点。找出中位数7,作为根节点。然后3放到左边,15放到右边。调整完成。
(2)继续插入10和9,导致不平衡。
最小不平衡子树如图所示。从根节点出发找到三个节点。
调整这三个节点的位置,方法和上面一样,把中位数10作为根节点。
(3)继续插入8导致不平衡,以及最小不平衡子树。
7是根节点。从7开始,找到7,10,9三个节点。调整这三个。
让9做根节点,7在左,10在右。
对于剩下的节点,左右子树位置保持不变。3仍然在最左,15仍然在最右。
然后再找到8应该插在哪里就行了。调整完成。
复述一遍方法:
1。找到最小不平衡子树(和其根节点)
2。从根节点出发,沿插入路径找三个节点。
3。调整这三个节点。(找出中位数,让中位数作为根节点,其余两个一左一右)
4。剩下的节点,左右子树的位置保持不变,再找到最后一个节点的插入位置。
这套方法万能,不用记书上的四种样式。