文章目录
持续更新中
持续更新中
持续更新中
一、插入
1、确定插入的新节点颜色
- 黑色
- 无论父节点是什么颜色,都会破坏 “任一节点到其所有后代外部节点的简单路径上,黑色节点的数量都相同” 这一性质
- 红色
- 如果父节点是红色,会破坏 “根节点到所有外部节点的简单路径上,没有两个连续的红色节点” 这一性质
- 如果父节点是黑色,插入新节点后仍是红黑树,不需要调整
综上,插入红黑树的新节点都是红色的
2、调整不平衡的红黑树
- 插入的新节点是根节点:直接将红色改为黑色即可
- 插入的新节点不是根节点,并且其父节点是红色的失衡情况如下:
- LLr
- LLb
- LRr
- LRb
- RLr
- RLb
- RRr
- RRb
2.1、详解 8 种失衡
2.1.1、LLr

其中,x 是插入的新节点,px 是 x 的父节点,ux 是 x 的叔叔节点,gx 是 x 的祖父节点
LLr:
- 第一个 L:插入的新节点的父节点是 gx 的左孩子
- 第二个 L:插入的新节点是 px 的左孩子
- r:插入的新节点的叔叔节点是红色的
2.1.2、LLb

其中,x 是插入的新节点,px 是 x 的父节点,ux 是 x 的叔叔节点,gx 是 x 的祖父节点
LLb:
- 第一个 L:插入的新节点的父节点是 gx 的左孩子
- 第二个 L:插入的新节点是 px 的左孩子
- r:插入的新节点的叔叔节点是黑色的
2.1.3、LRr

其中,x 是插入的新节点,px 是 x 的父节点,ux 是 x 的叔叔节点,gx 是 x 的祖父节点
LRr:
- L:插入的新节点的父节点是 gx 的孩子
- R:插入的新节点是 px 的右孩子
- r:插入的新节点的叔叔节点是红色的
2.1.4、LRb

其中,x 是插入的新节点,px 是 x 的父节点,ux 是 x 的叔叔节点,gx 是 x 的祖父节点
LRb:
- L:插入的新节点的父节点是 gx 的左孩子
- R:插入的新节点是 px 的右孩子
- b:插入的新节点的叔叔节点是黑色的
2.1.5、RLr

2.1.6、RLb

2.1.7、RRr

2.1.8、RRb

2.2、平衡方法
2.2.1、LXr(LLr + LRr)
以 LLr 为例

2.2.2、LLb

2.2.3、LRb
先将 LRb 变为 LLb,再按照 LLb 的操作调整平衡

1884

被折叠的 条评论
为什么被折叠?



