数据结构解析【红黑树】

数据结构解析【红黑树】_第1张图片

前言

​ R-B Tree,全称是Red-Black Tree,又称“红黑树”,它一种平衡二叉树。红黑树的每个节点上都有存储位表示节点的颜色,可以是红(Red)或黑(Black)。

特性

  1. 每个结点不是红色就是黑色
  2. 不可能有连在一起的红色结点
  3. 根结点都是黑色root
  4. 每个红色结点的两个子节点都是黑色。
  5. 叶子节点都是黑色:出度为0满足了性质就可以近似的平衡了,不一定要红黑数,可以为其他。

实际例子

​ Java在JDK1.8中引入了红黑树,实际的原因是因为当HashMap中hash函数插入计算到了重复位置而导致链表过长时,会导致查询过慢的情况。

链表过长时

数据结构解析【红黑树】_第2张图片

为了解决这个问题,而引入了红黑树,因为二叉树的查询类似于二分查询速度快。

引入红黑树

数据结构解析【红黑树】_第3张图片

平衡规则

所有插入的点默认为红色

  1. 变色

    当前结点的父亲是红色,且它的祖父结点的另一个子结点也是红色(叔叔结点)。

    1. 把父结点设为黑色
    2. 把叔叔结点也设为黑色
    3. 把祖父也就是爷爷结点设为红色
    4. 把指针定义到祖父结点设为当前要操作的
  2. 左旋

    当前父结点是红色叔叔结点是黑色的时候,且当前的结点是右子树。以父结点作为左旋点

  3. 右旋

    当前父结点是红色叔叔结点是黑色的时候,且当前的结点是左子树

    1. 把父结点变成黑色
    2. 把爷爷结点变成红色
    3. 以爷爷结点旋转

例子

  1. 变色
    数据结构解析【红黑树】_第4张图片

  2. 左旋
    数据结构解析【红黑树】_第5张图片

  3. 右旋
    数据结构解析【红黑树】_第6张图片

Java中的使用

jdk1.8后当HashMap的某个位置的链表超过8个时,则会由链表转换为红黑树,加快查询速度。

你可能感兴趣的:(数据结构,JAVA,数据结构,链表,算法)