红黑树

红黑树特性
1.根节点一定是黑色。
2.红色节点的两个子节点一定是黑色。(结合1和2推导出,红色节点一定有父节点,且父节点一定是黑色的)
3.对每个节点,若其没有子节点,都会虚构一个叶子节点(黑色,值为null)补上去,两个子节点缺哪个补哪个,两个都缺则都补。
4.任意一节点,到所有叶子节点路径的中间,都存在相同的黑色节点。(所以红黑树不是完美平衡二叉树,而是黑色完美平衡二叉树)

添加节点特性:
1.默认添加的是红色节点
2.红黑树自平衡最小单元是GPUC。Grandfather祖父节点,Parents父节点,Uncle叔叔节点,Current当前节点。
3.一定是父节点绕子节点为圆心旋转,父节点在子节点的左边则左旋成为子节点的左子节点,父节点在子节点的右边则右旋成为子节点的右子节点。
  旋转之后父节点成为了圆心的子节点:
  ①祖父节点的线变成连着了圆心,因为它变成了父节点。
  ②如果圆心原来有子节点,被父节点旋转后霸占了位置,则该子节点成为父节点的子节点。

添加节点遇到的4种情况:
1.添加的节点是根节点,则把节点的红色变成黑色。
2.添加的节点的父节点P是黑色,维持节点本身的红色不变。
3.添加的节点的父节点P是红色,叔叔节点U也是红色(此时祖父节点G必是黑色)。
  然后把父节点F和叔叔节点U变黑色,祖父节点G变红色。
  如果祖父节点G变成红色不符合红黑树的特性,则把祖父节点G当作新增节点,按照添加情况1,2,3,4重新处理。
4.添加的节点的父节点G是红色,叔叔节点U是黑色或空
  4.1 添加的节点和父节点F和祖父节点G,祖孙三代三点一线
      祖父节点G绕父节点F旋转,然后这2个节点改变颜色(G点旋转)。
  4.2 添加的节点和父节点F和祖父节点G呈三角关系
      父节点F绕添加节点旋转,重新定义了祖孙三代关系后,按4.1的逻辑再执行一次(P点旋转)。

你可能感兴趣的:(算法结构)