根据文章《rb-tree实现-插入操作-原理》中的内容,我们归类了红黑树的所有操作,光有理论不行,本文演示插入的所有场景
现在我们构建了一个10个元素的红黑树,其值从0-20,默认是偶数,其形状如下
我们测试插入节点1,则遍历到节点2上,往左边插入即可,如下
为了让父节点和叔叔节点都是红色,需要先插入节点3,则情况如下
然后插入节点0,则此时会将叔叔和父亲染色为黑色,祖父设置为红色,然后向上递归,如下
为了满足上述状态,需要先删掉节点0和3,其现状如下
此时我们添加节点0,它满足LL状态(祖父的左孩子是父,父的左孩子是节点0)
根据现在的情况,如果插入节点21,则满足父红叔黑RR状态(祖父的右孩子是父,父的右孩子是节点0)
为了满足父红叔黑LR状态,需要先删除节点21,则初始情况如下
此时如果我们插入节点19,则满足父红叔黑LR状态
为了满足父红叔黑RL状态,需要先删除节点0,2,再插入节点3,则初始情况如下
此时我们插入节点2,则满足父红叔黑RL状态
至此,对于红黑树的插入操作的所有情况已经图示介绍了。