红黑树总览

Posted 胡瀚

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了红黑树总览相关的知识,希望对你有一定的参考价值。

一. 规则

  1. 根节点必须是黑色;

  2. 节点要么是黑色要么是红色;

  3. 叶子节点都为黑色;  

  4. 从任意节点出发到根节点,所经历的黑色节点的数目相同

  5. 如果节点为红,其子节点必须为黑

 

二.插入

1.当前节点是根节点:把根节点改为黑色

2.当前节点的父节点是黑节点,保持不变

3.当前节点的父节点是红节点,并且当前接电费的叔叔节点是红色:把父节点和叔叔节点改为黑色,把祖父节点改为红色,把祖父节点作为当前节点,向上判断

4.当前节点的父节点是红节点,并且当前叔叔节点不是红节点:旋转,可以分为两种情况,即外侧插入和内侧插入

外侧插入进行左旋或者右旋,内侧插入则需要进行双旋转,可以细分为一下四种情况:

  a). 祖父节点 -> 父节点 -> 当前节点, 一直向右:做左旋,再把父节点改为黑色,之前的祖父节点改为红色

  b). 祖父节点 -> 父节点 -> 当前节点,一直向左:做右旋,再把父节点改为黑色,之前的祖父节点改为红色

  c). 祖父节点 -> 父节点 -> 当前节点,先向左再向右:先对当前节点做左旋,再对当前节点做右旋,然后把当前节点改为黑色,之前的祖父节点改为红色

  d). 祖父节点 -> 父节点 -> 当前节点,先向右再向左: 先对当前节点做右旋,再对当前节点做左旋,然后把当前节点改为黑色,之前祖父节点改为红色

 

 

 

 

 

参考链接:https://algs4.cs.princeton.edu/33balanced/

以上是关于红黑树总览的主要内容,如果未能解决你的问题,请参考以下文章

C++红黑树

红黑树介绍与实现

红黑树介绍与实现

红黑树介绍与实现

数据结构之红黑树

红黑树(C++实现)