zoukankan      html  css  js  c++  java
  • 4. 红黑二叉树

    一、红黑树是一种平衡二叉树

    定义:红黑树是一种特殊的二叉查找树,在其结点结构中增加一个存储位表示结点的颜色

    重要性质:通过遵循对结点着色的某种规则,对于所有从根结点到叶子结点的路径,红黑树确保没有一条路径会比其他路径长出两倍

     

    二、红黑树的平衡条件

    1. 每个结点的颜色要么是红色,要么是黑色
    2. 根结点是黑色的
    3. 所有的叶结点都是空结点,并且是黑色的
    4. 如果一个结点是红色的,那么它的孩子结点是黑色的
    5. 从一个结点到其子孙结点的每条路径都包含相同数目的黑色结点

    相对于平衡二叉树的平衡条件,该平衡条件较为宽松。虽然这可能导致红黑树的高度较高(仍是logn级别),但相较于平衡二叉树的插入/删除操作带来的频繁旋转,红黑树的插入操作最多进行两次旋转、删除操作最多进行三次旋转。由此可得,插入/删除的效率更好,但查找的效率较低(时间效率仍是O(logn))。

    对于红黑树而言,插入、删除、查找的时间复杂度都是O(logn)

     

    三、红黑树的应用

    红黑树的应用比较广泛,主要是用它来存储有序的数据,它的时间复杂度是O(logn),效率非常高。

    1. C++ STL中的set和map是用红黑树实现的
    2. I/O多路复用的epoll采用红黑树组织管理sockfd,以支持快速的增删改查
    3. Nginx中用红黑树管理定时器,因为红黑树是有序的,可以很快得到距离最小的定时器
    4. Java集合中的TreeSet和TreeMap是用红黑树实现地
    5. Linux虚拟内存的管理,进程的虚拟内存区域都存储在一棵红黑树上,每个虚拟地址区域都对应红黑树的一个结点,该结点的左指针指向相邻的低地址虚拟存储区域,右指针指向相邻的高地址虚拟地址空间

    四、插入和删除操作

    参考博文:一定让你真正彻底明白红黑树红黑树算法详细介绍

  • 相关阅读:
    Checkpointing
    Flink1.10全文跟读翻译
    The Broadcast State Pattern
    mr原理简单分析
    Event Time
    动态规划潜入
    寻找hive数据倾斜路
    Distributed Runtime
    druid18.1版本single-server启动报错
    Programming Model
  • 原文地址:https://www.cnblogs.com/xzxl/p/9572716.html
Copyright © 2011-2022 走看看