因为红黑树还是自己画出来比较好理解,所以基本都是图辣
(其实就是懒得打字😂)
红黑树
想要更好地理解红黑树,可以先理解二叉查找树和 2-3 树。为何呢?首先,二叉查找树中的结点 是 2-结点(一个键两条链),引入 3-结点(两个键三条链),即成 2-3 树;然后将 2-3 树中 3- 结点分解,即成红黑树,故结合二叉查找树易查找和 2-3 树易插入的特点,便成了红黑二叉查找 树,简称红黑树。
五大性质
1)每个结点要么是红的,要么是黑的。
2)根结点是黑的。
3)每个叶结点(叶结点即指树尾端 NIL 指针或 NULL 结点)是黑的。
4)如果一个结点是红的,那么它的俩个儿子都是黑的。
5)对于任一结点而言,其到叶结点树尾端 NIL 指针的每一条路径都包含相同数目的黑结点
二叉查找树
二叉查找树的性质就不多说了,很基本的树结构
二叉树的插入
根据BST的性质就可以知道,其实就是比较,然后找到插入的位置。
树的旋转
红黑树的插入
插入修复
分为三种情况,总的来说还是比较好理解的:
红黑树的删除
删除修复
对于红黑树的删除,还是有点复杂的,但是只要理解了红黑树的五大性质,还是很好掌握的:
其实主要就是考虑红生两黑子,每个结点到叶节点各个路径黑色数量一致两个性质的保证。
红黑树的C++实现
RBTree.h:
|
|
测试文件RBTree.cpp:
|
|
测试结果
……