面试之必掌握知识点:红黑树(二)
前面我们学习了2-3树和2-3-4树的基本定义和基本操作。现在我们继续前进攻克红黑树!有了前面的基础和原理的支持,我们就能更加容易的理解红黑树各种旋转以及染色等操作,而不用再去死记硬背。话不多说开整~
1. 红黑树的定义
- 每个节点要么是红色要么是黑色
- 根节点是黑色
- 所有的叶子节点都是黑色。
- 红色节点的子节点一定是黑色的(不能有连续的红色节点)
- 从任一节点到其每个叶子节点的路径所包含的黑色节点数目都相同。
(注意红黑树的叶子节点通常都是空指针,并不保存具体的值,在之后的图中我们会用一个黑色的小点代替,在变换的过程会忽略他们,并且视他们的有值的父节点为逻辑上的叶子节点)
看完了定义后,你一定感觉有点发懵,这红黑树的定义和2-3树,2-3-4树有什么关系呢?掌握了2-3树,2-3-4树,我还是看不懂红黑树的变换?别着急,咱们逐一来分析一下,看看2-3树2-3-4树和红黑树的共同之处。
2. 如何将2-3-4转变为红黑树
- 2-3-4树中的2节点对应红黑树中的黑色节点,且黑色节点的子节点也全部为黑色。
- 2-3-4树中的3节点对应红黑树中的黑色节点,且黑色节点的子节点只有一个为黑色。
- 2-3-4树中的4节点对应红黑树中的黑色节点,且黑色节点的子节点全部都是红色的。
(注:在本篇中,红黑树中希腊字母部分代表黑色的子节点)
看到这里我们就能发现两棵树之间的关联:
- 红黑树中的黑色节点代表2-3-4树中的一个新节点。
- 红黑树中的红色节点和它的黑色父节点在2-3-4树中属于同一个节点中的不同元素。
- 红黑树中一条路径上的黑色节点有多少个,就代表着2-3-4树一共有多少层。
了解了2种树之间的关联我们再具体看一下,红黑色在插入和删除的过程中是怎么由2-3-4树转换过去的?