红黑树插入操作详析

红黑树(RBT)的定义:它或者是一颗空树,或者是具有一下性质的二叉查找树:

1.节点非红即黑。

2.根节点是黑色。

3.所有NULL结点称为叶子节点,且认为颜色为黑。

4.所有红节点的子节点都为黑色。

5.从任一节点到其叶子节点的所有路径上都包含相同数目的黑节点。


插入操作

由于性质的约束:插入点不能为黑节点,应插入红节点。因为你插入黑节点将破坏性质5,所以每次插入的点都是红结点,但是若他的父节点也为红,那岂不是破坏了性质4?对啊,所以要做一些“旋转”和一些节点的变色!另为叙述方便我们给要插入的节点标为N(红色),父节点为P,祖父节点为G,叔节点为U。下边将一一列出所有插入时遇到的情况:

首先将插入点颜色设置为红色,

情形1:该树为空树,直接插入根结点的位置,违反性质1,把节点颜色有红改为黑即可。

情形2:插入节点N的父节点P为黑色,不违反任何性质,无需做任何修改。

情形3:P为红,P为G的左节点:

A、U为红,U,P变为黑,G变为红,此时以G为根的子树少了一个黑节点,将G看作插入点像上检查。

B、U为黑或U没有:

i、N为P的左节点(左左插入),P变为黑,G变为红,单向右旋转

ii、N为P的右节点(左右插入,先左旋转,然后按i作单向右旋转

形4:P为红,P为G的右节点:

A、U为红,U,P变为黑,G变为红,此时以G为根的子树少了一个黑节点,将G看作插入点像上检查。

B、U为黑或U没有:

i、N为P的右节点(右右) ,P变为黑,G变为红,单向左旋转

ii、N为P的左节点(右左),先右旋转,然后按i作单向左旋转

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值