【数据结构】红黑树小结

版权声明:该文是博主个人的学习笔记,如有错误,恳请看官在评论区指出,在下不胜感激~如要转载注明出处即可~ https://blog.csdn.net/wait_nothing_alone/article/details/81044734

红黑树是一种二叉搜索树。

性质

  • 一颗红黑树满足以下五个红黑性质

    1. 每个结点或者是红色或者是黑色。
    2. 根结点是黑色的。
    3. 每个叶结点是黑色的。(这个叶节点是树尾端的黑色节点nil)
    4. 若一个结点是红色的,它的两个子结点必须是黑色的。
    5. 对于任意一个结点,从该结点到它的每一个后代叶结点的简单路径上,都包含相同数目的黑色结点。
  • 一棵有n个内部结点的红黑树,它的高度至多为2lg(n+1)。也就是说,在一棵红黑树中不会有任何一条路径的长度会超过其他路径长度的两倍。

操作复杂度

红黑树的查找、插入、删除操作可以保证在最坏的情况下复杂度也为O(lgn)。

结点结构

struct RB_node{
    RB_node *left, *right, *parent;
    value_type key;
    color_type color;
}

相对于AVL树的优点

  • 两种树的各种动态集合操作的平均复杂度都为O(lgn)。
  • 由于AVL树的平衡度高于红黑树,所以AVL树的查找操作相对更快。
  • 由于AVL树是严格平衡的,所以在插入和删除时更容易造成不平衡的情况,并且在最坏情况下,需要旋转从引起不平衡的结点node到root整条路径上的所有节点来恢复平衡性,复杂度为O(lgn)。而对于红黑树来讲,它只需最多两次旋转就可以恢复平衡,复杂度为O(1)。所以对于插入和删除操作,红黑树的性能是明显优于AVL树的。
  • 所以在整体的性能上,红黑树是优于AVL树的。

猜你喜欢

转载自blog.csdn.net/wait_nothing_alone/article/details/81044734