数据结构之红黑树
数据结构之红黑树
前提
红黑树首先是二叉搜索树,需要满足以下要求:
- 根和叶子都是黑色。
- 不存在连续的两个红色结点。
- 任一结点到叶所有路径黑结点数量都相同
性质
最长路径不超过最短路径的两倍。
红黑树查询略逊于AVL树。
红黑树的删除插入上更加高效。(map
和set
基于此实现)
插入
插入结点默认为红色。(因为一般不会破坏任何一个性质,一旦破坏只可能违反根叶黑,不红红的性质)
如果性质被破坏了,就需要进行调整。
如果插入的是根节点
直接变黑即可
如果插入结点的叔叔是红色
上图省略空结点。
步骤是:叔父爷一起变色,爷爷变成插入结点,向上继续判定调整。
如果插入结点的叔叔是黑色
需要根据LL,RR,LR,RL形态进行旋转。
LL
上面为LL型,对爷爷进行右旋操作,旋转完成后对刚刚的旋转点和被旋转的点进行变色。
RR
LR
RL
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Totoroの旅!
评论