一、红黑树是带有颜色属性的BST
实际上用颜色而不是高度是为了节约空间,因为颜色只有一位,实际上这个数据结构也是相对AVL简单的
可以理解为用非严格的平衡换取增删节点的时候旋转次数的下降
它的性质有:
1、节点红/黑
2、根节点为黑色的,叶子节点带有两个空的黑色节点
3、每个叶子节点都带有两个空的黑色节点
4、每个红色节点的两个子节点都是黑色(或者说路径上不能有连续的红色节点
5、从任一节点到它所能到达的叶子节点的所有简单路径都包含相同数目的黑色节点
黑哨兵很重要,保证了树的平衡的问题
二、红黑树的插入
旋转操作与AVL树类似
插入时先标红(核心是旋转加颜色改变)
简单情况:
1、父节点为黑色,直接结束
2、父节点为红色,父节点的sibling为黑色
对于grandpa节点,父节点左/右旋提上去,再把grandpa节点标红,父节点标黑即可
3、父节点为红色,父节点的sibling为红色
则两个节点标黑,看祖父节点,标红,然后再往上更改,其实这里就是把祖父节点堪称刚才重新插入的一种情况
三、红黑树的插入
有点复杂,情况比较多,最好的分类情况是这样的:
首先看节点的情况
1、如果是叶子节点,直接删除即可
2、如果被删除节点只有一个子节点,那么我们用该子节点替代即可
3、如果有两个孩子,我们选择它的后继节点,这样用后继节点替代它之后,我们问题转化为删除后继节点的问题
(另外删除不是真的删除(除了叶子节点),都是后面的数据往前移动)
然后是颜色的修正的情况
见PPT
ADS第二节课红黑树笔记
最新推荐文章于 2025-02-28 10:04:18 发布