红黑树

红黑树是一种可以实现自平衡的二叉查找树,具有以下4个规范:

1)所有节点都是红色或者黑色;

2)根节点和空节点必须为黑色;

3)父节点和子节点不能同时为红色,但可以同时为黑色;

4)从根节点出发,到任意叶子节点,数出的黑色节点数目必须一样。

 

红黑树的基本操作有两种:

1)recolor;

2)rotation.

 

插入节点到红黑树的流程:

 

S1: 将新节点标为红色,按照二叉查找树的插入规则插入到适合位置;

当父节点P和叔节点U均为红色

S2: 将P U变为黑色;

S3:如果祖父节点不是根节点,就将祖父节点G变为红色;

 

当P为红色,U为黑色,又分为以下4种情况:

1)左左(P为G的左孩子且新节点为P的左孩子):以P填充G的位置,原来的G作为P的右孩子,P和G交换颜色。

 --------------->

 

2)左右(P为G的左孩子且新节点为P的右孩子):先让新节点填充P的位置、P作为新节点的左孩子,再按照左左的情况处理。

------->------->

3)右右(P为G的右孩子且新节点为P的右孩子):先让P填充G的位置,再让G成为P的左孩子,最后PG交换颜色。

--------------->

 

 

4)右左(P为G的右孩子且新节点为P的左孩子):先让新节点填充P的位置、P作为新节点的右孩子,再按右右的情况处理。

--------------->--------------->

 

 

 

 为了加深记忆与理解,可以参考:

https://www.cs.usfca.edu/~galles/visualization/RedBlack.html

 

posted @ 2020-10-10 14:48  日进一卒  阅读(120)  评论(0)    收藏  举报