红-黑树

红-黑树

1、有序数组,对于有序数组(例如哈希表),其查找的效率很高,但是插入效率低。适用于静态数据。
2、链表,对于链表的数据结构,其插入和删除的效率很高,但是查找的效率低。
3、树,对于树的结构,综合了有序数组的查找效率和链表的插入和删除效率,适用于静态数据。

一、二叉搜索树(BST树)
有序的树结构,树的左子树总是比根节点小,右子树总是比根节点大。

二、二叉平衡树(AVL树)
是二叉搜索树的一种改进。为了提高查找效率,保持左右子树的平衡,规定左右子树的高度最多相差1。

三、红黑树
是二叉平衡树的变种,并不要求完全的平衡,相对于二叉平衡树,红黑树再元素的插入和删除操作上可以进行更少的旋转操作,插入和删除的性能更加优越。

下面主要介绍红黑树以及红黑树的一些操作,主要有查找、插入和删除操作。
红黑树的平衡规则:
1.节点是红色或黑色。
2.根节点是黑色。
3.每个叶子节点都是黑色的空节点(NIL节点)。
4 每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点)
5.从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。
下面就是一种红黑树:
红-黑树

红黑树保持平衡的方法有:变色和旋转,旋转分为左旋和右旋。
漫画动图了解部分:
https://blog.csdn.net/chudelong1/article/details/82698010
代码理解部分:
https://blog.csdn.net/eson_15/article/details/51144079?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

C++中是以哦那个红黑树的结构来实现的有set和multiset。可以使用此类容器进行实现。