1 总体逻辑
1.2 二叉树
二叉树中,一个根节点最多有两个子节点。
1.3 二叉排序树 Binary Search Tree
二叉排序树是一个排好序的二叉树。且水平方向来看,总有
左节点 < 右节点
简单记忆其规律,可以在脑海中想象一个大大的小于号:
(图片来自https://icons8.com)
二叉排序树最大的问题就是不平衡。可以先阅读这篇文章:二叉排序树和平衡二叉树。
1.4 红黑树 Black Red Tree
红黑树是二叉排序树的一种。它是为了解决二叉排序树不平衡的问题,以提高增删改查的效率和时间稳定性。说白了,红黑树是为了弥补二叉排序树的缺点而提出的。最近在读Linux相关书籍,了解到Linux CFS进程调度算法就是使用红黑树来组织进程实例的。
红黑树模型,将所有的二叉树节点分为两种颜色,附加上一些基于颜色的限制规则,基于这些规则调整树的结构,即可保持树的平衡。
规则/性质有以下⑤条:
- 每个结点要么是红的要么是黑的。
- 根结点是黑的。
- 每个叶结点(叶结点即指树尾端NIL指针或NULL结点)都是黑的。
- 如果一个结点是红的,那么它的两个儿子都是黑的。
- 对于任意结点而言,其到叶结点树尾端NIL指针的每条路径都包含相同数目的黑结点。
这五条规则/性质和天书一样,我们应该如何理解?
顺便说一句,直接上来就说⑤个规则,然后堆一堆代码的所谓教程,就是我们熟悉又厌恶的填鸭式教育。
我们下面尽可能从本质上去理解红黑树。
2 优秀资料
- 清晰理解红黑树的演变—红黑的含义
- 红黑树动画
- 快速理解红黑树原理
- 【力荐】 硬核图解面试最怕的红黑树【建议反复摩擦】
3 个人理解
3.1 2-3树与二叉树
3.2 2-3树与红黑树
红色节点代表了这个节点与父节点组成3节点。
黑色节点代表了这个节点是一个独立的2节点。
2-3树中,3节点用一个圆圈把两个节点圈起来;
在红黑树中,3节点用黑色父节点+红色子节点表示。
所以红黑树的插入,删除操作,原理和2-3树是一样的,只是把画圈的操作改为给节点染色了。
给节点重新染色的过程就是树的深度调整过程。