标签:红黑树
最近研究了一下红黑树,做个简单的总结,有错误的地方请大家指正,红黑树有五条规则,本文主要就这五条规则给出一个图文的说明:
性质1. 节点是红色或黑色。
性质2. 根是黑色。
性质3. 所有叶子都是黑色。
解释:以[4 5 6]三个节点为例,这里姑且把[5]放在根节点,那么[4,6]就是根节点的两个子节点,这两个子节点也被标记为黑,因为它们是叶节点。
图1
如果此时要插入另一个节点[3],直观上看应该把它插在[4]的左孩子处,但是受限于红黑树的第三个规则(如上),若插在[4]的左孩子处,它必须被标记为黑色,但是这会与接下来要讲的第四个规则冲突。
性质4. 从任一节点到其每个叶子的所有简单路径都包含相同数目的黑色节点。
也就是说,如果把[3]插在[4]的左孩子处,会使得从[5]出发的左边那条路径包含2个黑色节点,从而比右边的路径多一个节点,所以与规则4发生了冲突,正确的做法如图2所示,即略微调整树的结构:
图2
如果此时我们还要插入两个节点:[2 1],直观上看应该把[2]插在[3]的左孩子处,把[1]插在[2]的左孩子处,因为[1]是叶节点,所以[1]必须被标记为黑,再根据规则4,[2]就必须被标记为红,但是这将与下面要讲的第五个规则冲突:
性质5.从每个叶子到根的所有路径上不能有两个连续的红色节点。
所以又要对目前的红黑树做点微调,正确的插法如图3所示:
图3
所以现在也可以有个直观的印象了,得意于这五条规则,红黑树还是比较平衡的(roughly balanced),所以其查找效率较高。
标签:红黑树
原文地址:http://blog.csdn.net/zqxnum1/article/details/42785723