红黑树的规则:
红黑树除了符合二叉搜索树的基本规则外,还有以下特点:
1、节点是红色或黑色
2、根节点是黑色
3、每个叶子节点都是黑色的空节点(NIL节点)
4、每个红色节点的两个子节点都是黑色(从每个叶子到根的所有路径上不能有两个连续的红色节点)
5、从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点
红黑树的关键特性:
从根到叶子的最长可能路径,不会超过最短可能路径的两倍
插入
红黑树在插入的时候,将插入的节点当作红节点进行插入,这样会尽可能小的破坏红黑树的特性。如果插入的是黑节点一开始就会不符合红黑树的第5条规则。
左旋转
逆时针旋转红黑树的两个节点,使得父节点被自己的右孩子取代。
右旋转
顺时针旋转红黑树的两个节点,使得父节点被自己的左孩子取代
插入操作
设要插入的节点为N,其父节点为P
祖父节点为G, 父亲的兄弟节点为U
(P和U是同一个节点的子节点)
情况1:
新节点N位于树的根上,没有父节点
这种情况下,直接将红色变换成黑色
情况2:
新节点的父节点P是黑色
只需给新节点加两个黑色的NIL
情况3:
P红U红G黑 —> P黑U黑G红
当G的父节点是红色的时候,需要递归的调整颜色。
如果递归调整颜色到了根节点,(不满足规则的时候)就需要旋转,如果只是像上图中右侧那样,就把G变为黑色。
情况4
P红U黑G黑,且N是P的左孩子
(1)G节点右旋转
(2) P变黑
(3)G变红
情况5
P红U黑G黑,且N是P的右孩子
(1)对P节点进行左旋转,(这样就变成了情况4)
(2)对G节点进行右旋转并改变颜色