很早以前写过一个c版本的红黑树,现在以c++重写之,并引入面向对象,有时间的话再实现线程安全版本.
原理
rb-tree是自平衡搜索树,整个结构是位于内存中的,中心思想是每次插入或者删除key时,维护好下面的5条性质,其中令其保持平衡的是第5条性质.
由于是二分搜索树,树的深度会较大.(相较于B-树、B+树)
五条性质:
1. root节点为黑色
2. 每个节点为黑色或红色
3. 叶子节点为黑色
4. 红节点的2个儿子为黑色
5. 任意一个节点到其所能到达的任意叶子节点的简单路径上的黑高度一致
注意啊,有人把空节点算为黑色节点,也有人直接忽略空节点.
主要是两个互逆的操作插入和删除.
- 插入
- 删除