看了这篇文章,希望面试官问我们红黑树的时候,能说点东西出来doge
红黑树一种特殊的二叉搜索树,性能非常高,在jdk.18后HahsMap底层就有用到(链表长度大于8且数组长度大于64转为红黑树)。
红黑树其实也是B树的一种落地实现,众所周知,B树是为了降低磁盘io次数,因为AVL高度平衡,中序遍历导致父节点被重复访问,所以就有了b树,B树是对AVL的平衡的削弱。
红黑树其实是一颗黑色高度平衡树。
红黑树性质:
- 每个节点或者是黑色,或者是红色。
- 根节点是黑色。
- 每个叶子节点(NIL)是黑色。
- 如果一个节点是红色的,则它的子节点必须是黑色的。
- 从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点。
内节点个数:
我们把以x为根节点的红黑树的黑节点高度记为bh(x)
红黑树其实就是对概念模型2-3树或2-3-4树的具体实现,
2-3树,就是最大阶(子节点数目)为3的B树,B树,全名BalanceTree,平衡树。2-3树中有2结点和3结点,2结点可存储一个元素和两个孩子(或没有孩子),3结点可存储两个元素和三个孩子(或没有孩子)
同理,2-3-4树,就是最大阶为4的B树
下面选择2-3树作为红黑树的转换
2-3树到红黑树的转化
2结点->黑节点
3结点->左倾红黑节点(只允许左倾)
我们现在再来以2-3树的视角来分析红黑树的五条定义
1、结点或是红色或是黑色
其实就是对应2-3树的转换
2、根节点必为黑色
2-3树如果根节点为2结点,那么对应红黑树的黑节点;
2-3树如果根节点为3结点,那么对应红黑树的左倾红黑树
3、所有叶子结点(nil结点)都是黑色
空链接
4、任意结点到叶子节点的黑色结点数目相同
红黑树中的黑色父节点和红节点都是绑定的,在2-3树种本来就是同一层,所以只有黑结点才会贡献真正的高度,所以是黑色完美平衡
5、红节点的孩子结点都是黑色
2-3树虽然没有4结点,但在2-3-4种体现的就是黑色结点带两红色儿子,所以不会有连续红节点
相信到此,你对红黑树的五个性质有了些许了解了。
删除结点
作为二叉搜索树,如果要删除结点,关键是找到前驱后继结点,然后要删除的结点
左旋和右旋
维持红黑树的性质
插入结点
二叉搜索树找到合适的地点进行插入,在进行调整。
其实,其实东西都是串起来,就像数据结构的AVL树,B树,B+树,红黑树等,都有使用场景。
抱歉,好像看了也讲不出什么哈哈