2-3-4树与红黑树的对应关系

        2-3-4树和红黑树之间可以建立等价关系,2-3-4树的插入和删除过程也可以对应到红黑树的旋转与颜色变换过程。红黑树和2-3-4树之间的结点对应关系如下面的图:


图1    3结点与4结点的拆分

2-3-4树与红黑树的对应关系_第1张图片

图2  一棵2-3-4树转换为红黑树

2-3-4树与红黑树的对应关系_第2张图片

 图3  2-3-4树转换为红黑树的方式不唯一(图(来自REF[3])中的个别错误不用太计较^_^)

        算法导论中红黑树的类型定义是大致这样的:

typedef struct RBTreeNode{
	ElementType key;
	ColorType color;
	RBTreeNode *lchild,*rchild;
	RBTreeNode *p;
} RBTreeNode; 
        数据结构(C语言版)Eliis Horowitz Sartaj Sahni Susan Anderson-Freed一书中给出了一种类型定义:

typedef enum {red,black} color;
typedef struct red_black *red_black_ptr;
typedef struct red_black {
	element       data;
	red_black_ptr left_child;
	red_black_ptr right_child;
	color left_color;
	color right_color;	
};
第二种定义可以和上面的三幅示意图直接对应。可以看出,若在2-3-4树中的位于一个结点中的几个元素在拆分为单个红黑树结点时他们之间的连接线是红色的,而原来在2-3-4树中位于父子结点的元素在拆分结点以后形成的红黑树结点之间的连接线是黑色的。红色线可以看成虚线,表示在2-3-4树中原本是在一个结点内的;黑色线可以看成实线,对应2-3-4树中父亲节点与儿子结点的链接关系。在算法导论中的类型定义中,父子结点的链接不带颜色信息,而将颜色信息转化成结点本身的颜色信息, 这个本身的颜色信息可以表示为其父结点指向该结点的指针颜色。或者换个角度(个人观感)红黑树中黑色父节点与红色儿子结点的链接线即对应以上3幅图中的红色线条( BR->虚线/红线),而红色父节点与黑色儿子结点见的链接线对应以上3幅图中的黑色线条( RB->实线/黑线)。
REF:

1,算法导论

2,数据结构(C语言版) Ellis Horowitz Sartaj Sahni Susan Anderson-Freed

3,http://www.cnblogs.com/guoyiqi/archive/2011/06/08/2129310.html

你可能感兴趣的:(数据结构与算法,二叉树,查找)