【红黑树】RB-tree

一、红黑树定义

  红黑树五条性质:

  1. 红黑树是每个节点都带有颜色属性的二叉查找树,颜色只能为红色或黑色;
  2. 根节点是黑色;
  3. 所有叶子节点(即NULL)均为黑色;
  4. 从每个叶子到根的所有路径上不能有两个连续的红色节点(也就是每个红色节点的子节点只能是黑色。);
  5. 从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。

  上边五条性质决定了红黑树是有平衡性的(因为从根节点到叶节点最长路径最多是最短路径的一倍,也就是最长路径上 红黑红黑红黑 这样,最短路径上 黑黑黑 这样),但是红黑树的平衡性没有 AVL 树那么严格(在 AVL 树中任何节点的两个子树的高度最大差别为1,所以它也被称为高度平衡树),所以在插入删除过程中进行的左旋右旋操作会比AVL树少很多。

二、红黑树插入

  首先红黑树是二叉搜索树,所以一个新的元素要插入的时候,先按照二叉搜索树的方式,比较跟每个节点的大小,决定向左还是向右走,走到一个待插入位置的节点,成为 N
  根据上边红黑树定义中的性质5,规定新增节点默认必须是红色,根据性质4,新增节点的父节点必须是黑色的;那么根据二叉搜索树找到插入点后,如果未能满足上述条件,就需要调整颜色并旋转树形,分为三种情况:

1、空树

  也就是待插入节点就是根节点位置,那么让节点颜色为黑即可(根据红黑树定义中的性质2)

2、N 的父节点 P 是黑色

  那么就是符合要求的,新增节点为红色,父节点为黑色,无需调整;

3、N 的父节点 P 是红色

  根据性质3,N 的祖父节点必为黑色(因为插入前的红黑树是满足要求的)。
  那么又分为三种情况:

  1. N 的叔父节点为红色
      这种情况,将 N 的父节点和叔父节点的颜色都改为黑色,若祖父节点是根节点就将其改为黑色,否则将其颜色改为红色,并以祖父节点为插入的目标节点,开始递归检测,如下图所示。
  1. N 的叔父节点为黑色, 且 N 和 N 的父节点在同一边
      也就是都是左子节点或者都是右子节点。以都是左子节点为例,将父节点改为黑色,祖父节点改为红色,然后以祖父节点为基准右旋(都为右子节点时做相应的左旋),如下图所示。
  1. N 的叔父节点为黑色, 且 N 和 N 的父节点不在同一边
      以父节点为祖父节点的左儿子为例,以父节点为基准,进行左旋,然后以父节点为目标插入节点进入上述3.2情况(N 的父节点 P 是红色,N 的叔父节点为黑色, 且 N 和 N 的父节点在同一边)进行操作,如下图所示。

三、红黑树删除

  待填写

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值