红黑树

红黑树

概念

红黑树是一种特殊的二叉查找树。红黑树上的每个节点都有存储位表示节点的颜色(红或者黑)。红黑树的效率要非常接近与平衡二叉树。在c++的模版中的map就是基于红黑树来实现的。

我的具体代码的实现在我的github上,有兴趣的同学可以参考一下。

红黑树有如下特性:

  1. 每个节点或者是黑色、或者是红色。
  2. 根节点的颜色是黑色。
  3. 每个叶子节点是黑色。(这里的叶子节点是为空NIL的叶子节点)
  4. 如果节点是红色的,那么他的子节点必是黑色的。
  5. 从一个节点到该节点下的叶子节点的所有路径上包含相同数目的黑色节点
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F1fEB6ir-1592669027265)(./source1/rb_tree.png)]
    在红黑树中,叶子节点NIL是不会实际存放键值key的。

基本操作

大家在学习平衡二叉树的时候,为了使一颗二叉树再次达到平衡左旋和右旋就是其中的基本操作。

左旋

如图将A进行左旋,其中F是A的父节点(这里A是F的左子树),B是A的右子树,LB是B的左子树,RB是B的右子树。主要操作如下:

  1. 将节点B作为F的左孩子。
  2. 将A作为B的左孩子。
  3. 将B的左子树LB作为A的右子树。
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-peOYnNnc-1592669027266)(./source1/左旋.png)]

右旋

如图将A进行右旋,其中F是A的父节点(这里A是F的左子树),B是A的左子树,LB是B的左子树,RB是B的右子树。主要操作如下:

  1. 将节点B作为F的左孩子。
  2. 将A作为B的右孩子。
  3. 将B的右子树RB作为A的左子树。
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3PrhH1SF-1592669027267)(./source1/右旋.png)]

查找

红黑树是二叉查找树的一种特殊形式其查找方法与二叉查找树相同。下面是具体的情况以及处理的方法,具体操作不在这里详细说明。

  1. 查找的key<当前节点的key时,当前节点移动到当前的左孩子
  2. 查找的key>当前节点的key时,当前节点移动到当前的右孩子
  3. 查找的key=当前节点的key时,就找到了key所在的位置
  4. 当前节点为空NULL时,那么就表示查找失败。(这里可以返回查找失败的位置,供插入新的的键值时使用)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值