思考平衡树调整问题
@(算法学习)
在这篇文章中讲到了如何根据型号记忆旋转的方向。但是还不够深入具体。
http://blog.csdn.net/u011240016/article/details/52877474?locationNum=1&fps=1
现在挑其中一种RL型举例说明,如何先R再L,对什么结点进行旋转。
最简单的RL型是最让人难受的一种运用场景。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CMucbdKC-1571673289312)(./屏幕快照 2016-11-22 下午11.50.45.png)]
如何旋转?
A是最小不平衡子树的根结点,首先需要右旋的是A的右子树,即B、C。再对整个不平衡子树向左调整。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9ykcSE5G-1571673289314)(./屏幕快照 2016-11-22 下午11.54.55.png)]
需要清楚的是RL是相对于什么的RL。
答案是:相对于最小不平衡子树的根而言。插在了这个最小不平衡子树的右子树的左子树上。
即:
数字表示平衡因子。
注意到C是最小不平衡子树的右子树的左子树的根结点,先调整的就是它和它的父结点的相对位置。
再进行左旋。
有意思的是,看C最后成为根结点,但是它的两个孩子两次旋转否分别交给了它打压下去的根结点。一个是B,一个是A。这就是它成为老大的代价。
2019.10 Update:
END.