您的位置:首页 > 理论基础 > 计算机网络

忘掉旋转,利用2-3-4树,学习红黑树 http://www.cnblogs.com/liuyunfeng/archive/2013/12/12/3471368.html

2015-11-25 14:52 429 查看

忘掉旋转,利用2-3-4树,学习红黑树

红黑树是每个节点都带有颜色属性的二叉查找树 ,颜色为红色或黑色。在二叉查找树强制一般要求以外,对于任何有效的红黑树我们增加了如下的额外要求:

性质1. 节点是红色或黑色。
性质2. 根是黑色。
性质3. 所有叶子都是黑色(叶子是NIL节点)。
性质4. 每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点)
性质5. 从任一节点到其每个叶子的所有简单路径 都包含相同数目的黑色节点。

这些性质保证了根节点到任意节点的路径长度,最多相差一半。因为路径上的黑色节点相等,差别只是不能相邻的红色节点个数。

利用2-3-4树可以比较容易地理解红黑树。所有红色节点都与父节点构成3或4节点,其它节点为2节点。

在插入/删除操作的时候,考虑到这种对应关系,比较容易理解:

插入操作:

空树:成为黑色根节点
父节点P为黑色:将新节点N涂红插入
父节点P为红色

将新节点N涂红插入
从叔父U节点的颜色,判断是3还是4节点

3节点简单扩充为4节点:例如插入红5到上图的(黑1红6)就变成了(红1黑5红6),子树按照顺序接入该节点即可。
4节点扩充为一个2节点和一个3节点,对2节点递归:例如插入红20到上图的(红22黑25红27)就变成了(红25黑27)与(红20黑22红6),红25的左子树为黑22;然后在红25上递归,解决可能的红色节点相邻的问题(性质4)。

删除操作:用子树上的节点替换要删除的节点,新的待删除的节点N成为最多只有一个子树的节点。

N为根节点或者N为红色节点:将子树放入N的位置
N为黑色节点,父节点P为红色:把3或4节点降阶为2或3节点,下移节点P与其N的兄弟节点S构成一个新的3节点,其中S为树根。
N为黑色节点,父节点P为黑色:

兄弟节点S为黑色

S的子节点都为黑:涂红节点S,在P的位置上递归,解决黑色节点短缺的问题(性质5)。
S的子节点不都为黑:即为3或4节点,分裂之,取其中一个节点成为新的根

兄弟节点S为红色:P 与S构成了3节点,将其降为2节点。

这里没有使用旋转的概念,只是把等高的子树重新接入新的组合节点,感觉更容易理解。

[1] 2-3-4树,http://zh.wikipedia.org/wiki/2-3-4%E6%A0%91

[2] 红黑树,http://zh.wikipedia.org/wiki/%E7%BA%A2%E9%BB%91%E6%A0%91

[3] 从2-3-4树谈到Red-Black Tree(红黑树),/article/4975044.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: