数据结构——红黑树原理

性能分析

首先,无论是插入数据还是查找数据,红黑树都是平衡的,查找键值的过程类似于二叉查找树,但是确不会出现树失衡,降低查找效率,其次是在插入键值时,虽然会通过左旋或者右旋来调节树的平衡,但是其限制比较低,所以插入的效率依然比较高。

定义

红黑树中的每个节点需要满足以下五个定义
1.每个节点是红的或者是黑的
2.根节点是黑的
3.每个叶子节点是黑的 —— 这里的叶子节点指的原来叶子节点的左右节点
4.如果一个节点是红的,那么它的两个儿子节点都是黑的
5.对每个节点,从该节点到其子孙节点的所有路径上包含相同数的黑节点
在这里插入图片描述
这里的空节点当作叶子节点

节点变色旋转

在这里插入图片描述
父节点:待插入的节点是该节点的子节点
叔叔节点: 父节点的兄弟节点

插入节点

红黑树中最为关键的就是节点的插入和删除。首先每个节点最开始都是红色,为了满足红黑树的要求而改变了颜色。 注意插入过程类似于二叉树,但是红黑树还需要调整树结构。

  • 插入根节点
    根据定义要求,根节点为黑色,所以第一个节点需要变色,过程见图
    在这里插入图片描述
  • 插入第二个节点
    在这里插入图片描述
    最开始为黑色,然后插入到根节点的右侧
    在这里插入图片描述
    根据变色分析,由于父节点为黑色,所以不需要变色直接插入就可以了
  • 插入第三个节点
    首先找到新节点的父节点,然后插入左侧或者右侧
    在这里插入图片描述
    分析,由于父节点为红色,叔叔节点为空,就需要旋转 + 变色
    旋转
    在这里插入图片描述
    分析可以知道这里是将父节点的父节点旋转到父节点的左侧 —— 左旋
    变色
    在这里插入图片描述
    由于根节点不能为红色,所以将根节点的颜色变为黑色,然后为了满足,每个节点到其根节路径的黑色节点的个数相同,将节点1变为红色。
  • 插入第四个节点
    在这里插入图片描述
    首先找到父节点,因为父节点为红色,叔叔节点为红色,根据变换规则,将叔叔节点和父节点变为黑色,然后祖父节点变为黑色,结果如下
    在这里插入图片描述
  • 插入第五个节点
    在这里插入图片描述
    走到这里我们大致可以知道,红黑树为什么提高插入的效率,因为红黑树并不是追求极致的平衡,而是局部的平衡(这里是个人的看法),通过红黑节点来调整整个树的结构。这里补充一下,在插入数据时,因为节点颜色的改变,可能会调节多次,就是左旋或者右旋多次。

小结

红黑树的原理大致就是以上这些了,关于具体的代码如何实现,有兴趣的朋友研究一下。
总的来说,红黑树就是一种特殊的二叉树结构,其在插入和获取数据上得到了平衡,效率都非常高,这也是为什么在jdk1.8 中 hashmap 会选择使用红黑树来处理哈希冲突。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值