平衡二叉树的手动调整方法

看书左旋右旋看着懵逼,不懂往左旋转往右旋转到底是怎么个旋转法。

总结了一个万能的手动调整方法,不用记忆什么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。剩下的节点,左右子树的位置保持不变,再找到最后一个节点的插入位置。

 

这套方法万能,不用记书上的四种样式。

 

posted @ 2020-09-03 17:15  MorpheusDong  阅读(1868)  评论(0编辑  收藏  举报