图解红黑树和JAVA实现

文章目录

  • 一、红黑树的性质
  • 二、红黑树的操作
    • 1. 理解两个基本操作(左旋和右旋)
    • 2. insert操作

一、红黑树的性质

红黑树是AVL树的一个变种。对红黑树的操作在最坏情形下花费 O ( l o g N ) O(log N) O(logN)时间。
红黑树是具有下列着色性质的二叉查找树:

  1. 每一个结点或者为黑色,或者为红色;
  2. 根是黑色的;
  3. 每个叶结点(NIL)是黑色的;
  4. 如果一个结点是红色的,那么它的两个子结点必须是黑色的;
  5. 对每个结点,从该结点到其所有后代叶结点的简单路径上,均包含相同数目的黑色结点。

黑高(black-height): 从某个结点 x 出发(不含该结点)到达一个叶结点的任意一条简单路径上黑色结点的个数称为该结点的黑高

一个有n个内部结点的红黑树的高度至多为 2 log ⁡ ( n + 1 ) 2\log(n+1) 2log(n+1)

二、红黑树的操作

1. 理解两个基本操作(左旋和右旋)

这个和AVL树的操作一样,如果理解了AVL树的旋转操作,可跳过该部分。

  • 左旋
    图解红黑树和JAVA实现_第1张图片

可以理解为把x的右结点y提起来;

  • 右旋

图解红黑树和JAVA实现_第2张图片

右旋可以理解为把x的左节点y提起来;

接下来为了维护红黑树的性质,就需要对结点进行左旋和右旋操作(有的时候需要对同一结点进行连续进行两次旋转,叫做双旋转);

2. insert操作

你可能感兴趣的:(数据结构与算法(JAVA实现),数据结构)