对了,这就是平衡
AVL树旋转分析
- 特点:
- AVL树:二叉搜索树,每个结点的平衡因子的绝对值都小于2
AVL树平衡因子的计算方法
平衡因子:右子树的高度减去左子树的高度
- 由平衡因子的计算方法可知平衡因子值为正数,则表示该结点的右子树比左子树高
- 相反若平衡因子的值为负,则表示该结点的左子树比右子树高
1.左单旋:
-
特点:右边的右边高
-
由平衡因子的计算过程可知当结点subR和parent值都为正值的时候,就是右边的右边高,所以进行左单旋来保持AVL树的平衡
-
旋转条件:parent->_bf == 2 && cur->_bf== 1
-
旋转过程图示
-
旋转过程的代码(并未整个的完成后续工作)
subR->_left=parent;
parent->_right=subRL;
2.右单旋
-
特点:左边的左边高
-
由平衡因子的计算方式可知当结点subL和parent值都为负值的时候,就是左边的左边高,所以进行右单旋来保持AVL树的平衡
-
旋转条件:parent->_bf==-2,cur->_bf==-1
-
旋转图示
subL->right=parent;
parent->_left=subLR;
3.左右双旋
-
特征:左边的右边高
-
旋转条件:parent->_bf==-2 && cur->_bf==1
-
插入后subLR结点的平衡因子的值对调整后parent与subL平衡因子的影响
4.右左旋
- 特征:右边的左边高
- 旋转条件:parent->_bf == 2 && cur->_bf == -1
- 插入后subRL结点的平衡因子的值对调整后parent与subR平衡因子的影响
上述过程就是平衡二叉树的旋转分析,自己总结的比较简单.希望可以帮助到你。