前言:文章只是简单的对红黑树的性质和插入删除做记录,并没有深入解析红黑树的种种,需要深入了解红黑树的小伙伴需要看下其他的文章,例如这篇文章:https://www.jianshu.com/p/e136ec79235c
红黑树性质
- 节点是红色或黑色。
- 根是黑色。
- 所有叶子都是黑色(叶子是NIL节点)。
- 每个红色节点必须有两个黑色的子节点。(从每个叶子到根的所有路径上不能有两个连续的红色节点。)
- 从任一节点到其每个叶子的所有简单路径都包含相同数目的黑色节点。
红黑树插入
插入节点N为根节点
也就是说插入之间树是空的没有节点,此时插入节点后,把根节点涂成黑色即可。
插入节点N的父节点为黑色节点
直接插入即可,父节点如果是跟的话,也是黑色节点,包含在内。
插入节点N的父节点为红,且叔节点也是红色
- 插入后,把父节点和叔节点颜色改成黑色,祖父节点改成红色。
- 把祖父节点当成新插入的节点继续往上平衡。
插入节点N的为父节点的左子节点,父节点为红,且叔节点是叶子节点(即为黑色,左左情况)
叔节点能且只能是叶子节点(也就是NIL),如果叔节点是一个非空节点的话,那插入之前的树右边的黑高是3,左边黑高是2,违背了红黑树的性质,所以叔节点只能是空节点。这种情况也称为左左。
- 把父节点和祖父节