左偏红黑树插入新节点后的维护操作

红黑树的两个性质:

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

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

左偏红黑树就是再增加一条新性质:

3. 黑节点的右孩子也不为红。

由于插入的是红节点,于是只有性质23可能被打破。开始将当前节点指向新节点,然后递归向上维护,在整个递归维护过程中,会保持整个树的性质与刚插入时一样:即除了当前节点与其父节点可能会违反性质23以外整颗树都是合法的(当前节点如果没有父节点直接退出递归)。

当前节点的父节点为根节点时情况很简单,这里不赘述。

当前节点的父节点不为根节点时,可能的情况有三种:

① 只违反性质3,左旋一次,再翻转两次颜色,这样ABC的黑深度保持不变,此时已经可以结束递归。

② 只违反性质2,右旋一次,再翻转一次颜色,这样ABCD的黑深度保持不变,但顶上那个节点的颜色变了,将当前节点指向最后方框里的那个节点继续递归。

③ 同时违反性质23,先左旋再右旋,再翻转一次颜色,这样ABCD的黑深度保持不变,同②一样将当前节点指向最后方框里的那个节点继续递归。

当然,如果性质23均不违反,也可以直接退出递归。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值