上一篇文章,我们对红黑树的插入进行了java代码实现,参考:https://blog.csdn.net/dengjili/article/details/113204943
其中使用了测试数据4, 1, 2, 5, 0, 7, 9, 8, 3, 6
public class RBTreeTest {
public static void main(String[] args) {
int nums[] = { 4, 1, 2, 5, 0, 7, 9, 8, 3, 6};
RBTree tree = new RBTree();
for (int i : nums) {
tree.put(i);
}
tree.print();
}
}
层次遍历输出结果
value=5, color=BLACK
value=2, color=RED
value=8, color=RED
value=1, color=BLACK
value=4, color=BLACK
value=7, color=BLACK
value=9, color=BLACK
value=0, color=RED
value=3, color=RED
value=6, color=RED
那这里再使用图解插入过程,数据4, 1, 2, 5, 0, 7, 9, 8, 3, 6
红黑树一次完整的插入数据过程
- 【1, 2, 5, 0, 7, 9, 8, 3, 6】-> 【4】,新增节点都是红色,但是为根节点,变黑
- 【2, 5, 0, 7, 9, 8, 3, 6】-> 【4,1】
- 【5, 0, 7, 9, 8, 3, 6】-> 【4,1,2】
进行CASEA2+CASEA3调整
- 【0, 7, 9, 8, 3, 6】-> 【4,1,2,5】
进行CASEB1调整,再对根节点变黑
- 【7, 9, 8, 3, 6】-> 【4,1,2,5,0】
- 【9, 8, 3, 6】-> 【4,1,2,5,0,7】
进行CASEB3调整
- 【8, 3, 6】-> 【4,1,2,5,0,7,9】
进行CASEB1调整
- 【3, 6】-> 【4,1,2,5,0,7,9,8】
进行CASEB2+CASEB3调整
- 【6】-> 【4,1,2,5,0,7,9,8,3】
- 【】-> 【4,1,2,5,0,7,9,8,3,6】
进行CASEA1调整
此时8,5,2还需要调整,进行进行CASEB3调整
最终生成红黑树
核对层次遍历输出结果,一致
value=5, color=BLACK
value=2, color=RED
value=8, color=RED
value=1, color=BLACK
value=4, color=BLACK
value=7, color=BLACK
value=9, color=BLACK
value=0, color=RED
value=3, color=RED
value=6, color=RED