学习数据结构以来,平衡二叉树的调整一直会了又忘,写个博客加深记忆
理解:平衡二叉树:任意结点的左右子树高度之差要小于等于1。当新插入的结点使得这种平衡性被破坏,就需要调整。怎么调整取决于造成不平衡的“麻烦结点”和“根结点(插入后不平衡结点)”的位置关系。
最重要的是!!!!:调整哪三个结点
怎么调整:将三个结点中位于中间的树变为根节点
1.右右旋转(RR)---插入结点是根结点右子树的右子树,如图
调整:把被破坏结点的右子树提上来当作根节点
举例:插入13导致结点5平衡因子=1-3=-2,而且14是5的右子树的右子树
2.左左旋转
调整:如下图所示,需要注意的是根据平衡二叉树原理将BR放到A的左子树
如果一个结点插入导致很多结点平衡被破坏,优先选最距离插入结点最近的结点为根结点调整
上图Apr插入导致Mar和May平衡均被破坏,这里先选择Mar为根结点进行LL调整
3.LR旋转
4.RL旋转