什么是红黑树?
也是一种二叉搜索树,但是每个结点上增加一个存储位表示结点的颜色,可以是RED或BLACK,它是接近平衡的
红黑树的性质也是很关键的
1)每个结点不是红的就是黑的
2)每条路径上黑色的数量必须相等
3)根结点必须是黑的
4)两个红色的不能连续
5)每个叶子结点都是黑的(指的是空节点)
思考题1
在节点的定义中,为什么要将节点的默认颜色给成红色的?
答:因为要保证每条路径上黑色结点数目相同,如果新插入的结点给为黑色,就不能保证这个条件了
红黑树的结构
为了实现关联容器,红黑树的实现中增加一个头结点,因为根结点必须为黑的,为了与根结点进行区分,将头结点也定义为黑色,并且让头结点的Parent指向根结点,left指向红黑树中最小的结点,right指向红黑树的最大的结点。
红黑树的插入操作
红黑树是在二叉树的基础上加上其平衡限制条件,因此红黑树的插入客人分为两步:
1)按照二叉搜索树的规则插入新节点
2)检测新节点插入后,红黑树的性质是否遭到破坏
因为新节点的默认颜色是红色,因此,如果其双亲结点的颜色是黑色,没有违反红黑树任何性质,则不需要调整,当新插入结点的双亲结点颜色为红色时,就违反了性质,红色不能连在一起
cur:当前结点 p:父结点 g:祖父结点 u:叔叔结点
p在g的左边和右边的情况依次分别列出了,如下图