平衡二叉树:
前提是有序的二叉树,它的左右子树高度相差不超过1,它所有的子树也要满足这个
要求
如果一个有序的二叉树呈单支状(接近单支),它的效率接近链表,查找、访问效率
较低,因此当达到平衡时它的效率才最高
由于节点的位置受到值的影响,因此只能调整,而不能强行修改
二叉树不平衡的基础原因:
x y
/ \ / \
y t1 以y为轴向右旋转 z x
/ \ / \ / \
z t2 t3 t4 t2 t1
/ \
t3 t4
x y
/ \ 以y为轴向左旋转 / \
t1 y x z
/ \ / \ / \
t2 z t1 t2 t3 t4
/ \
t3 t4
x x z
/ \ / \ / \
y t1 z t1 y x
/ \ / \ / \ / \
t2 z y t4 t2 t3 t4 t1
/ \ / \
t3 t4 t2 t3
以z为轴向左旋转 以z为轴向右旋转 最终达到平衡
x x z
/ \ / \ / \
t1 y t1 z x y
/ \ / \ / \ / \
z t2 t3 y t1 t3 t4 t2
/ \ / \
t3 t4 t4 t2
以z为轴向右旋转 以z为轴向左旋转 最终达到平衡
红黑树:
是一种自平衡的树,它的平衡不是根据子树的高度来调整的,而是给节点设置一
个颜色,来达到平衡。
优点:插入和删除的效率,比AVL树要高
缺点:没有AVL树均匀,所以查找、访问效率没有AVL树高