RB-tree(红黑树)是一种平衡二叉搜索树,它每个节点上增加了一个存储位来表示节点的颜色,可以是 Red 或 Black,故得名。通过对任何一条从根到叶子的简单路径上各个节点的颜色进行约束,红黑树能够确保没有一条路径会比其他路径长出 2 倍,近似于平衡。

红黑树在改变元素数量和元素搜索方面都很出色,它保证节点安插时最多只会做两个重新链接(relink)的动作,而且到达某一元素的最长路径的深度,至多只是最短路径的深度的两倍。

STL 中的重要容器——set/multiset 通常以红黑树(red-black tree)实现。

1. 红黑树的基本性质

红黑树中每个节点包含 5 个属性:color, key, left, right, p(父节点)。如果一个节点没有子节点或者父节点,则该节点的相应指针为 NIL。

一棵红黑树是满足下面红黑性质的二叉搜索树:

  • 每个节点是红色的,或是黑色的;
  • 根节点是黑色的;
  • 每个叶节点是黑色的;
  • 如果一个叶节点是红色的,则它的两个子节点均是黑色的;
    • 黑色节点则无其子节点颜色的要求。
  • 对每个节点,从该节点其所有后代叶节点的简单路径上,均包含相同数目的黑色节点。

数据结构——红黑树(red-black tree)相关推荐

  1. 数据结构--红黑树 Red Black Tree

    文章目录 1.概念 2.操作 2.1 左旋.右旋(围绕某个节点的左/右旋) 2.2 插入 2.3 删除 3. 代码 1.概念 二叉树在频繁动态增删后,可能退化成链表,时间复杂度由 O(lgn) 变成 ...

  2. 红黑树Red/Black Tree

    红黑树Red/Black Tree 建立二进制搜索树,我们得到红/黑树,旨在解决BST可能变得不平衡的问题.(BST[二叉搜索树],是对于任意的node x,如果node y是node x的左边的节点 ...

  3. 红黑树(Red Black Tree)详解

    红黑树 红黑树(Red Black Tree) 是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组. 红黑树是在1972年由Rudolf Bayer发明的,当时被称为 ...

  4. 红黑树(Red Black Tree)超详细解析

    红黑树详解 什么是红黑树? ​ 红黑树,是一种二叉搜索树的特化,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black. 通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确 ...

  5. 红黑树(Red–black tree)

    一.红黑树的概念: 在计算机科学中,红黑树是一种自平衡二叉搜索树.每个节点存储一个表示"颜色"("红"或"黑")的额外位,用于确保树在插入和 ...

  6. 数据结构 - 红黑树

    数据结构 - 红黑树 - 面试常问知识点 数据结构是面试中必定考查的知识点,面试者需要掌握几种经典的数据结构:线性表(数组.链表).栈与队列.树(二叉树.二叉查找树.平衡二叉树.红黑树).图. 本文主 ...

  7. 数据结构-红黑树插入结点示例

    数据结构-红黑树插入结点示例 1.红黑树简介 2.在线可视化生成红黑树工具 3.红黑树插入结点性质和规则 3.1.红黑树插入结点性质 3.2.红黑树插入结点规则 4.红黑树插入结点示例 4.1.红黑树 ...

  8. 红黑树(Red-Black Tree)解析

    这一篇我们来聊聊红黑树,写这篇文章的起因是在阅读HashMap源码时,发现JDK1.8对于HashMap的实现引入了红黑树来处理哈希冲突以提高性能(戳这里,有详述),而红黑树的数据结构和操作都是较为复 ...

  9. 高级数据结构与算法 | 红黑树(Red-Black Tree)

    文章目录 红黑树 红黑树的概念 红黑树的性质 红黑树与AVL树 红黑树的实现 红黑树的节点 红黑树的插入 红黑树的查找 红黑树的验证 完整代码 红黑树 红黑树的概念 红黑树,是一种二叉搜索树,但在每个 ...

最新文章

  1. Java异常之异常机制
  2. SVN服务端的搭建及客户端连接(云上搭建服务端)
  3. Git submodule的使用
  4. Less常用语法整理
  5. WordPress get_allowed_mime_types函数(wp-includes/functions.php)存在跨站脚本漏洞
  6. 怎么加载文件_Java虚拟机从入门到入土之JVM的类加载机制
  7. 哈夫曼编码压缩率计算_考研经验分享(哈工大计算机)
  8. 44rwx权限45权限说明案例46修改权限
  9. SVD 与 PCA 的直观解释(3): SVD的直观解释及推导
  10. java filter bme_节点红色,想截断BME280传感器的结果
  11. 数据质量才是数据分析的关键
  12. 视频教程-Three.Js (WebGL ThreeJs) 网页3D实战视频教程-其他
  13. 判断日期是否是明天,今天,昨天
  14. 富集分析(GO、KEGG、GSEA)
  15. Unity3d游戏引擎Windy系列教程:常见组件扫盲讲解引入unity所需的脚本语言基础
  16. 零基础学习C语言必读书籍
  17. 七大OSINT操作系统(开源网络情报)
  18. linux 怎么把新硬盘分区,linux添加新硬盘分区
  19. 第一步PHP开发环境搭建
  20. usb storage驱动分析

热门文章

  1. mysql导出所有binlog_mysql导入、导出、查看binlog命令
  2. 问题记录:既然MAC能唯一标识一台设备,那为什么我们还需要IP呢?
  3. 微信表情图像代表什么意思_电表型号怎么选 型号字母都代表什么意思
  4. sdk开发包怎么使用_怎么使用 Buildroot 构建根文件系统?
  5. 最大公约数GCD与最小公倍数LCM
  6. Pytorch——用nn.Sequential搭建简单的神经网络
  7. 图像处理总结:Canny边缘检测(二)
  8. paddle中import onnxruntime报错缺失Microsoft Visual C++ Redistributable for Visual Studio 2019 not install
  9. springboot显示信息并且修改_Spring Boot小结-03--增.删.改.查
  10. NullReferenceException