平衡二叉树:
搜索二叉树的优化版,保证了树的平衡,即每个的结点的左子树高度与右子树高度差的绝对值不会超过1(0或1)。
为了保证二叉树的平衡,给每个结点引入平衡因子,父节点。
平衡因子:右子树高度减去左子树高度(可以反过来)。
为了保证二叉树的平衡,我们通过旋转的方式。
二叉树需要旋转的类型总过分为4大类,旋转的方式也分为4类
第一类 左单旋
抽象图:对于这种类型的所有都可以进行左单旋
关键在于parent, subR,subRL,
parent:不平衡结点
subR的右子树插入结点导致subR的右子树偏高,而parent本来就因为subR导致右子树偏高,又在subR的右子树插入结点后,导致parent失衡。
调整方法:
第二类: 右单旋
抽象图:
与左单旋类似
解决办法:
第三类: 右左旋(需先右旋再左旋)
抽象图:
右左旋可以拆分为一个右旋,一个左旋,思想是先通过右旋把子树变为一个完完全全的需要左旋模型。
subR通过左旋,变成第三个图,从而达到需要左旋模型,然后再通过左旋parent,从而实现平衡。
需要注意的是h可以等于0
也就是说如上图的那样60底下可以没有结点。
第四类: 左右旋(需先左旋再又旋转)
抽象图:
解决方法:思想与第三类相似