insert_rebalance 在红黑树中
insert_rebalance in red-black tree
insert_rebalance in rb_tree 大多需要两次轮换?
我不这么认为!
"1"为最新插入节点。是案例1:current节点是红色的,父亲是红色的,叔叔是红色的。
所以我们设置父亲的颜色为黑色,叔叔的颜色为黑色,父亲的父亲的颜色为红色,将父亲的父亲设置为当前节点,继续走
经过以上操作,又是案例1
想象一下:如果一直是case 1,rotate的个数不会只有2个,可能更多。
我上面的说法对吗?我想证实一下我的想法。
如果插入位置是随机的,那么两次旋转是很不寻常的。
从 0 个节点开始:
B(0%需要旋转两次)
b
r(25% 需要旋转两次)
b
r r (0% 需要旋转两次)
b
乙乙
r(20% 需要旋转两次)
b
乙乙
r r (0% 需要旋转两次)
在可以进行两次旋转的步骤中,也可以在不需要第二次旋转的情况下填充树。如果插入位置始终是最大而不是随机,则两次旋转插入的数量为 0,但大约 50% 的时间你将旋转一次。
insert_rebalance in rb_tree 大多需要两次轮换?
我不这么认为!
"1"为最新插入节点。是案例1:current节点是红色的,父亲是红色的,叔叔是红色的。
所以我们设置父亲的颜色为黑色,叔叔的颜色为黑色,父亲的父亲的颜色为红色,将父亲的父亲设置为当前节点,继续走
经过以上操作,又是案例1
想象一下:如果一直是case 1,rotate的个数不会只有2个,可能更多。
我上面的说法对吗?我想证实一下我的想法。
如果插入位置是随机的,那么两次旋转是很不寻常的。
从 0 个节点开始:
B(0%需要旋转两次)
b r(25% 需要旋转两次)
b r r (0% 需要旋转两次)
b 乙乙 r(20% 需要旋转两次)
b 乙乙 r r (0% 需要旋转两次)
在可以进行两次旋转的步骤中,也可以在不需要第二次旋转的情况下填充树。如果插入位置始终是最大而不是随机,则两次旋转插入的数量为 0,但大约 50% 的时间你将旋转一次。