红黑树基本原理

红黑树是一颗二叉查找树

  • 红黑树的节点不是红色就是黑色
  • 叶子节点的是黑色(NIL)
  • 根节点都是黑色的root
  • 红色节点的两个子节点一定是黑色的,不可能存在两个相连的红色节点
  • 黑高:任意一个节点的叶子的节点路径上的黑节点数量是相同的
    • 如果一个节点存在一个黑子节点,那么该节点必然有两个子节点

1,三种基本操作

  • 变色

  • 左旋

在这里插入图片描述

  • 右旋
    在这里插入图片描述

2,查找:与二叉搜索树一样

3,插入:新建节点必须是红色的

  1. 当红黑树是空树的时候

    插入+染色

  2. 当插入的节点已经存在的情况

    查找到相应的节点以后把值更新即可

  3. 当插入的节点父节点为黑色

    直接节点插入,不影响树的黑平衡

在这里插入图片描述

  1. 当插入节点父节点颜色是红色

    插入的节点是红色===》父节点必然不是根节点===》必然存在爷节点

4.1, 存在叔节点需要进行的处理

在这里插入图片描述

如图所示需要插入的是q节点:那么G节点是红色,存在叔叔节点 爷-父-叔-子 是黑红红红

需要进行的操作是 父-叔变黑,爷变红,将爷爷设置为当前节点,返回3进行操作(递归)
在这里插入图片描述

4.2,不在叔叔节点或者叔叔节点是黑色的情况
4.2.1, LL双红

在这里插入图片描述

首先红黑树+二叉搜索树的性质,其最小子结构必然是图中情况

  • 首先将父节点B与爷节点A颜色互换
  • 然后进行右旋操作
4.2.2, LR双红

在这里插入图片描述

  • B节点左旋 得到LL双红的情况
4.3,4.2的镜像问题

4.3.1,RR双红

  • 父祖换色
  • 左旋

4.3.2,RL双红

  • 右旋变为RR双红的情况
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值