红黑树(RB Tree)插入新节点后的维护操作

在二叉查找树(BST)的基础上,节点额外维护一个颜色(红或黑)信息(空节点颜色为黑,可以建一个0节点,则新节点初始化时便自动指向0节点),满足以下两个性质:

1. 红节点的子节点为黑(这意味着红节点的父节点也为黑)。

2. 从根出发到任意空节点的路径黑节点数量均相同。

则是一颗红黑树。

新插入的节点颜色为红色,此时性质2保持只有性质1可能被打破,将当前节点指向新插入的节点,按以下6种情况递归维护:

1. 当前节点为根节点,结束递归。

2. 当前节点的父节点为黑,性质1也没问题,结束递归。

3. 当前节点的父节点为红且父节点为根节点,将父节点涂黑(所有路径黑节点数量+1不破坏性质2),结束递归。

4. 当前节点N的父节点为红且叔节点为红,如下图(借用oi wiki):

此时将P、U涂黑,将G涂红,然后将当前节点指向G,继续下一轮判断。

5. 当前节点N的父节点P为红且叔节点为黑且N和P为同侧节点,此时G必为黑节点,这里只说均为左侧的情况,右侧同理:先右旋G,再将P涂黑将G涂红,此时同时满足性质1和2(子树根节点的颜色依旧为黑,节点插入前的红黑树是合法的),结束递归。

6. 当前节点N的父节点P为红且叔节点为黑且N和P为异侧节点,同样只说一种对称的情况:如下图,N为P的右儿子,P为G的左儿子,将P左旋一下,将当前节点指向P,则完全变成了第5种情况,按先前的方式处理即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值