【数&C++】图解红黑树 — 插入节点

1. 什么是红黑树
  • 红黑树,是一种二叉搜索树,但在每个节点上增加一个存储位表示节点的颜色,可以是Red或Black。
  • 通过对任何一条从根到叶子的路径上各个节点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因而接近平衡。

【性质】

  1. 每个节点不是红色就是黑色;
  2. 根节点是黑色的 ;
  3. 树中不会出现连续的红节点;
  4. 每条路径上黑色节点的数量都是相等的;
  5. 叶子节点指的是空节点。
2. 插入
  1. 按照二叉搜索树规则插入新节点;
  2. 检测新节点插入后,红黑树的性质是否遭到破环。

【红黑树插入的是红节点】

  1. 如果父亲是黑色,没有破坏性质,结束
  2. 如果父亲是红色,破坏了性质3,祖父一定是黑色,关键看叔叔(三种情况)。

【约定】

  • cur为当前节点,p为父节点,g为祖父节点,u为叔叔节点;
    • 情况一:cur为红,p为红,g为黑,u存在且为红;
    • 情况二:cur为红,p为红,g为黑,u不存在/存在为黑 -> 单旋;
    • 情况三:cur为红,p为红,g为黑,u不存在/存在为黑 -> 双旋。

【分析情况时以父为左,叔叔为右】

  • 父为左,叔叔为右

    1. 情况一:变色、更新;
    2. 情况二:右单旋、变色;
    3. 情况三:先左单旋(变化后成情况二)、再右单旋、变色。
  • 父为右,叔叔为左

    1. 情况一:变色、更新;
    2. 情况二:左单旋、变色;
    3. 情况三:先右单旋(变化后成情况二)、再左单旋、变色。

【图解:以父为左,叔叔为右分析】

  • 情况1
    在这里插入图片描述
  • 情况2在这里插入图片描述
  • 情况3在这里插入图片描述
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值