AVL与红黑树的区别


AVL

1.简介

AVL树是最先发明的自平衡二叉查找树,一般是用平衡因子差值判断是否平衡并通过旋转来实现平衡,每个节点的左右子树高度差不超过1,和红黑树相比,AVL树是严格的平衡二叉树,平衡条件必须满足(所有结点的左右子树高度差不超过1)。如图所示:
在这里插入图片描述

2.局限性

增加和删除可能需要通过一次或多次树旋转来重新平衡这个树,而因为旋转非常耗时,维护这种高度平衡所付出的代价比从中获得的效率收益还大,故而实际的应用不多,更多的地方是用追求局部而不是非常严格整体平衡的红黑树。当然,如果应用场景中对插入删除不频繁,只是对查找要求较高,那么AVL还是较优于红黑树。
注意:查找、插入和删除在平均和最坏情况下都是O(log n)。

3.应用

Windows NT内核中广泛存在。

红黑树

1.简介

一种二叉查找树,但在每个节点增加一个存储位表示结点的颜色,可以是红或黑(非红即黑)。通过对任何一条从根到叶子的路径上各个节点着色的方式的限制,红黑树确保没有一条路径会比其他路径长出两倍,因此红黑树是一中弱平衡二叉树(由于是弱平衡,可以看到,在相同的节点情况下,AVL树的高度低于红黑树),相对于要求严格的AVL树来说,它的旋转次数少,插入最多两次旋转,删除最多三次旋转,所以对于搜索,插入,删除操作较多的情况下,我们就用红黑树。
在这里插入图片描述

2.性质

  • 每个节点或者是红色的,或者是黑色的。
  • 根节点是黑色的。
  • 每个叶子节点(NIL)是黑色的。
  • 如果一个节点是红色的,则它的两个儿子都是黑色的。
  • 对每个节点,从该节点到子孙节点的所有路径上包含相同数目的黑节点。
    注意:包含n结点的红黑树简单操作的运行时间为O(log n)。

3.应用

map和set底层都是用红黑树实现的。


第一次记录自己的学习笔记,如果您发现问题,欢迎指点。

猜你喜欢

转载自blog.csdn.net/qq_42647711/article/details/108421683