• [数据结构


    一、简介

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


    二、性质

    如下图所示,每个节点非红即黑:

    • 每个节点非红即黑;
    • 根节点是黑的,每个叶节点(叶节点即树尾端 NULL 指针或 NULL 节点)都是黑的;
    • 如果一个节点是红的,那么它的两个孩子都是黑的;
    • 对于任意节点而言,其到叶子点树 NULL 指针的每条路径都包含相同数目的黑节点;
    • 每条路径都包含相同的黑节点。

    三、应用

    • 广泛用于 C++ 的 STL 中,set 和 map 是用红黑树实现的;
    • Linux 的的进程调度,用红黑树管理进程控制块,进程的虚拟内存空间都存储在一颗红黑树上,每个虚拟内存空间都对应红黑树的一个节点,左指针指向相邻的虚拟内存空间,右指针指向相邻的高地址虚拟内存空间;
    • IO 多路复用的 epoll 采用红黑树组织管理 sockfd,以支持快速的增删改查;
    • Nginx 中用红黑树管理定时器,因为红黑树是有序的,可以很快的得到距离当前最小的定时器;
    • Java 的 TreeMap 的实现;。

    四、红黑树和 AVL 树的区别

    红黑树和 AVL 树都是平衡二叉树,虽然 AVL 树是最早发明的平衡二叉树,但直接把平衡二叉树等价于 AVL 树,我认为非常不合适,但很多地方都在这么用。两者的比较如下:

    平衡二叉树类型 平衡度 调整频率 适用场景
    AVL树 查询多,增/删少
    红黑树 增/删频繁

  • 相关阅读:
    Android Service组件在新进程绑定(bindService)过程
    第二章:创建框架和窗体
    ZOJ 2859 二维RMQ(模板)
    POJ 2828 Buy Tickets
    管理案例:怎样提高项目周例会的效率和效果?
    hdu4416 Good Article Good sentence (后缀数组)
    购买DigtalOcean VPS 安装Wordpress 攻略
    Asteroids!-裸的BFS
    hdu3015 Disharmony Trees
    iOS开发-自己定义后台显示图片(iOS7-Background Fetch的应用)
  • 原文地址:https://www.cnblogs.com/linuxAndMcu/p/11563809.html
Copyright © 2020-2023  润新知