红黑树的使用场景非常广泛,比如nginx中用来管理timer、epoll中用红黑树管理事件块(文件描述符)、Linux进程调度Completely Fair Scheduler用红黑树管理进程控制块、C++STL中map,set的底层实现全是用的红黑树。掌握红黑树的原理以及使用场景,对于我们面试和工作、以及理解开源代码都是非常有帮助。 二叉树介绍 在关注红黑树之...
红黑树首先作为树的结构出现,包含了树形结构的基本特征,操作具有查找、添加、删除。在添加节点时必然导致红黑树的结构不符合红黑树规则,此时将对添加节点后的树进行旋转(左旋和右旋)以保证回复红黑树的特性。 下面将以红黑树的旋转、添加、删除进行逐步讲解。 红黑树基本节点定义 #defineRED 0//红色节点#defineBLACK ...
More:红黑树采用“适度平衡”标准,可大致表述为:任一节点左、右子树的高度,相差不得超过两倍 ,也可表述为:最长路径长度不超过最短路径长度的2倍,即极端情况可能出现:一条 黑红黑红...黑 (最后的叶子结点必定为黑) ,另一条 黑黑...黑 (全黑) ,若两条树的高度都为n,则两条树路径的黑高最大相差 2n-1...
红黑树(Red-Black Tree,简称R-B Tree),它一种特殊的二叉查找树。 红黑树是特殊的二叉查找树,意味着它满足二叉查找树的特征:任意一个节点所包含的键值,大于等于左孩子的键值,小于等于右孩子的键值。 除了具备该特性之外,红黑树还包括许多额外的信息。 红黑树的每个节点上都有存储位表示节点的颜色,颜色是红(Red)...
Red-Black Tree(红黑树)是一种自平衡二叉查找树,它在1972年由 Rudolf Bayer 发明,他称之为 “Symmetric Binary B-Tree”。Leo J. Guibas 和 Robert Sedgewick 在1978年写的一篇论文中把它命名为“Red-Black Tree”。它有良好的最坏情况下的运行时间,实践中也非常高效。它可以在 Ο(log n) 的时间内查找、...
红黑树 概念:红黑树(Red-Black Tree)是一种自平衡二叉树。但需要注意的是,红黑树并不是平衡二叉树,恰恰相反,红黑树放松了平衡二叉树的某些要求,由于一定限度的“不平衡”,红黑树的性能得到了提升。它的应用非常广泛,如STL(标准模板库)的map和set容器的内存存储结构就是红黑树。
红黑树有着良好的稳定性和完整的功能,性能表现也很不错,综合实力强,在 STL 的 set 和 map 等容器中被优先使用。 因为红黑树也是一种二叉树,所以例如:插入结点、删除结点、查询结点等针对红黑树的操作与二叉树的操作前段演算法相同,只是在每次操作完后可能会让树的结构改变而可能无法满足红黑树的规则,进而可能不...
STL包含迭代器、容器、算法、仿函数和适配器等五个主要部分。 容器可分为序列式和关联式两种,算法主要是对容器中元素进行操作和处理,仿函数则是封装了自定义函数的类模板。 内部实现主要基于模板和泛型编程,利用C++模板的特性将数据类型和算法进行解耦,使得STL可适用于各种数据类型和编程范式。
Set(集合)属于关联式容器,也是STL中最实用的容器,关联式容器依据特定的排序准则,自动为其元素排序。Set集合的底层使用一颗红黑树(可能读者对此不太了解,等但学到树论与图论的章节的时候就会明白原因),其属于一种非线性的数据结构,每一次插入数据都会自动进行排序,注意,不是需要排序时再排序,而是每一次插入数据的时候...
高性能:如 map 可以高效地从十万条记录里面查找出指定的记录,因为 map 是采用红黑树的变体实现的。 高移植性:如在项目 A 上用 STL 编写的模块,可以直接移植到项目 B 上。三大组件介绍 1. 容器 几乎可以说,任何特定的数据结构都是为了实现某种特定的算法。STL容器就是将运用最广泛的一些数据结构实现出来。