红黑树的原理(持续更新)

2019-10-29  本文已影响0人  李白开水

红黑树的基本概念

红黑树(英语:Red–black tree)是一种自平衡二叉查找树。
维基百科红黑树:https://zh.wikipedia.org/wiki/%E7%BA%A2%E9%BB%91%E6%A0%91

红黑树的性质

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

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

解释说明第五点:从13—8—1—6,不算13自己,该路径包含一个黑色节点。
13—8—11,不算13自己,该路径包含一个黑色节点。
13—17—15,不算13自己,该路径包含一个黑色节点。
13—17—25—22,不算13自己,该路径包含一个黑色节点。
13—17—25—27,不算13自己,该路径包含一个黑色节点。

红黑树的插入

2.右旋(左子为轴,当前结点右旋)


image.png

2.情况二,插入节点的父节点为黑色,没有违反性质,也没有破坏红黑树的结构,不用做任何调整。
3.情况三,插入的父节点是红色

① 将父节点和叔叔节点颜色调换由红色变为黑色
② 将祖父节点颜色调换,由原来的黑色变为红色

变换后如图:


image.png

变换后就转为了情况四
4.情况四,当前节点的父亲节点为红色节点,叔叔节点为黑色,当前节点是父亲节点的右子树。

将父节点作为当前节点做左旋

变换后如图:


image.png

变换后就转为了情况五
5.情况五,当前节点N(7)的父亲节点为红色节点,叔叔节点为黑色,当前节点是父亲节点的左子树。

① 将父节点颜色调换由红色变为黑色
② 将祖父节点颜色调换,由原来的黑色变为红色
③ 以祖父节点为当前节点做右旋

变换后如图:


image.png

持续更新,未完待续……

上一篇 下一篇

猜你喜欢

热点阅读