0
点赞
收藏
分享

微信扫一扫

红黑树学习

玉新行者 2022-03-26 阅读 65

红黑树

1.红黑树的规则

  1. 节点时黑色或红色
  2. 根节点是黑色
  3. 每个叶子结点都是黑色的空节点(NIL节点)
  4. 每个红色节点的两个子节点都是黑色(从每个叶子到根的所有路径不能有两个连续的红色节点)
  5. 从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。
    在这里插入图片描述以上的约束,确保了红黑树的关键特性:从根到叶子的最长路径,不会超过最短可能路径的两倍。

2.红黑树的变色

插入一个新节点时,可能会使树不再平衡,可以通过三种方式的变换,让树保持平衡:换色,左旋转,右旋转。
对于换色:在插入节点的时候,通常新节点是红色的。在插入节点为红色的时候,有可能插入一次是不违反红黑树规则的。红色节点可能导致出现红红相连的情况,不过可以通过颜色调换和旋转来调整。

3.红黑树的左旋转和右旋转

左旋转:逆时针旋转红黑树的两个节点,使得父节点被自己的右孩子取代,而自己成为左孩子。
在这里插入图片描述
右旋转:顺时针旋转红黑树的两个节点,使得父节点被自己的左孩子取代,而自己成为右孩子。在这里插入图片描述

4. 红黑树的插入操作

设定:要插入的节点为N,其父节点为P,其祖父节点为G,其父亲的兄弟节点为U。
情况①:新节点N位于树的根上,没有父节点。我们直接将红色变成黑色
情况②:新节点的父节点P是黑色。直接插入即可。
情况③:父红叔红祖黑。将P和U变成黑色,将G变成红色。(但是,如果N的祖父节点的父节点可能是红色,就需要递归调整颜色,如果递归到根节点了,就要进行旋转。)
在这里插入图片描述情况④:父红叔黑祖黑,N是左儿子。变为父黑祖红右旋转。
在这里插入图片描述情况④:父红叔黑祖黑,N是右儿子。方法:以P为根,进行左旋转,形成情况④,接下来按情况④处理。
在这里插入图片描述

举报

相关推荐

0 条评论