平衡二叉树介绍:
平衡二叉树的全称叫平衡二叉搜索树,它首先是一棵二叉搜索树,且具有以下性质:它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
对于一般的二叉搜索树,它的理想高度是为log2n,其各操作的时间复杂度(O(log2n))。但是,在某些极端的情况下(如:在插入的序列是有序的时),二叉搜索树将退化成近似单向链表,此时它的操作时间复杂度将退化成线性的,即O(n)。
我们可以通过随机化建立二叉搜索树来尽量的避免这种情况,但是在进行了多次的操作之后,由于在删除时,我们总是选择将待删除节点的后继代替它本身,这样就会造成总是右边的节点数目减少,以至于树向左偏沉。这同时也会造成树的平衡性受到破坏,提高它的操作的时间复杂度,而平衡二叉搜索树就可以弥补这个缺点。
如何把不平衡的二叉树调整为平衡二叉树:
我在检查二叉树是否平衡时,肯定是从叶子结点往根结点遍历,因此我们遇到的不平衡的二叉树有以下四种情况,分别是:
//1 解决方法:以B轴向右旋转
A B
/ \ / \
B t1 C A
/ \ / \ / \
C t2 t4 t3 t2 t1
/ \
t4 t3
//2 解决方法:先以C轴向左旋转,再以C为轴向右旋转
A A C
/ \ / \ / \
B t1 C t1 B A
/ \ / \ / \ / \
t2 C B t3 t2 t4 t3 t1
/ \ / \
t4 t3 t2 t4
//3 解决方法:以B轴向左旋转
A B
/ \ / \
t1 B A C
/ \ / \ / \
t2 C t1 t2 t3 t4
/ \
t3 t4
//4 解决方法:以C轴向右旋转,再以C轴向左旋转
A A C
/ \ / \ / \
t1 B t1 C A B
/ \ / \ / \ / \
C t4 t2 B t1 t2 t3 t4
/ \ / \
t2 t3 T3 T4
平衡二叉树的优点:
避免二叉搜索树的单支状分布的情况,能让二叉搜索树以最佳的状态进行操作,时间复杂接近O(log2n)。
平衡二叉树的缺点:
平衡二叉树在创建、添加、删除时,为了让二叉树保持平衡需要进行大量的左旋、右旋、高度计算,所以平衡二叉树在创建时,添加、删除结点时速度比较慢。
因此平衡二叉树适合使用在数据量大且数据量稳定的情况,没有大量的添加、删除动作,大多数情况下都是进行查询操作。
红黑树与AVL树的区别:
1、AVL树在物理上就是平衡的,所以在创建、添加、删除时速度比较慢,但它的查询速度接近平衡二叉树的极限。
2、红黑树是一种特殊的AVL树,它的物理结构不是严格的平衡,而是接近平衡,从根结点所有的叶子结点的速度大致相同,它的非绝对平衡使用节约很多左旋、右旋的次数,因此它创建、添加、删除时速度比AVL树要快,查询速度接近AVL树。
线索二叉树
线索二叉树介绍:
我们在遍历二叉树时会得到一个线性的序列结果,但遍历的过程是非线性的(函数递归),该过程比较耗时,我们可以借助结点中的空的指针,增加一些线索,使用二叉树能够使用循环语句进行遍历,提高二叉树遍历的速度。