红黑树

红黑(Red-black)树

​ 是一种自平衡二叉查找树,1972年由Rudolf Bayer发明,它与AVL树类似,都在插入和删除操作时能通过旋转操作保持二叉查找树的平衡,以便能获得高效的查找性能。**它可以在 O(logn) 时间内做查找,插入和删除等操作。**红黑树是2-3-4树的一种等同,但有些红黑树设定只能左边是红树,这种情况就是2-3树的一种等同了。对于AVL树来说,红黑树牺牲了部分平衡性以换取插入/删除操作时少量的旋转操作,整体来说性能要优于AVL树。

特点:

  • 节点是红色或黑色。
  • 根节点是黑色。
  • 每个叶节点(NIL节点)是黑色的。
  • 每个红色节点的两个子节点都为黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点)
  • 从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。
  • 最长路径不超过最短路径的2倍


向红黑树中插入14的节点,由于15是黑色节点,所以没有破坏结构,不需要做任何的改变

如果向树中插入21的话,会破坏红黑树的规则,必须要调整,就是变色和旋转


为了符合红黑树的规则,会把节点红变黑或者黑变红,21,22是连续的红色,因此要将22红变黑


此时,不符合规则5,因此需要将25黑变红


此时还没有结束,因为25和27都出现了红色,因此需要将27变成黑色

旋转跳跃

左旋: 逆时针旋转,父节点被自己的右孩子取代,而自己成为自己的左孩子

右旋:顺时针旋转,父节点被做孩子取代,而自己成为自己的右孩子

初探_红黑(Red-black)树相关推荐

  1. dota2比分网_红黑电竞比分横空出世 LPL夏季赛火热进行

    红黑电竞比分网横空出世了,红黑电竞为您提供更快更准更有趣的电竞比分,实时直播电子竞技比赛.红黑电竞覆盖了DOTA2.CS:GO.KOG.LOL.王者荣誉等职业电竞比赛比分.各战队电竞数据.各电竞比赛资 ...

  2. 聊聊HashMap红黑扩容和树化的时机

    我们都知道HashMap的底层的数据结构是红黑树/链表+Node数组结构,hash冲突的情况下数组长度超过64或者链表长度超过6时候,就会红黑树化,但是实际上两者是不等同的,红黑树化的总是在扩容超过6 ...

  3. java 二叉树 红黑树_常见数据结构(二)-树(二叉树,红黑树,B树)

    常见数据结构(二)-树(二叉树,红黑树,B树) 标签: algorithms [TOC] 本文介绍数据结构中几种常见的树:二分查找树,2-3树,红黑树,B树 写在前面 本文所有图片均截图自course ...

  4. 红黑树中nil结点_什么是红黑树?程序员面试必问!

    点击上方java小组,选择"置顶公众号" 优质文章,第一时间送达 当在10亿数据中只需要进行10几次比较就能查找到目标时,不禁感叹编程之魅力!人类之伟大呀! -- 学红黑树有感. ...

  5. hashmap中用红黑树不用其他树_为什么hashMap引入了红黑树而不是其他结构

    1.为什么hashMap使用红黑树而不是其他结构? 在回答这个问题之前,我们先了解一下有关二叉树的基本内容. ①二叉排序树(又称二叉查找树): 1)若左子树不为空,则左子树上所有结点的值均小于根结点的 ...

  6. 外卖和快递行业数据_外卖、快递行业红黑榜公示第一期,快看看有你熟悉的吗?...

    为督促外卖企业落实交通安全主体责任,增强外卖即时配送服务人员的交通安全文明行车意识,严格遵守相关交通安全法律法规,降低交通违法和交通事故的发生率,提升行业整体形象,遵义交警根据各地道路交通守法情况确定 ...

  7. java容器之七_TreeMap与红黑二叉树

    TreeMap的实现是红黑树算法的实现,所以要了解TreeMap就必须对红黑树有一定的了解,其实这篇博文的名字叫做:根据红黑树的算法来分析TreeMap的实现,但是为了与Java提高篇系列博文保持一致 ...

  8. 红黑树+java+删除_红黑树深入剖析及Java实现

    红黑树是平衡二叉查找树的一种.为了深入理解红黑树,我们需要从二叉查找树开始讲起. BST 二叉查找树(Binary Search Tree,简称BST)是一棵二叉树,它的左子节点的值比父节点的值要小, ...

  9. BST AVL 红黑树 B B+树

    二叉搜索树(BST) 简明BST递归定义(Knuth Donald): 对于任意一个节点均满足: 1. 所有位于左子树的节点值均比该节点值小 2. 所有位于右子树的节点值均大于等于该节点值 3. 所有 ...

最新文章

  1. 搭建Jasig CAS中央认证服务实现单点登录——搭建Tomcat并实现SSL安全连接
  2. “重金求来”Alibaba技术官并发编程笔记,附Java面经
  3. * 图形例子,函数实现体会地址传递
  4. (1)编译安装lamp三部曲之apache-技术流ken
  5. android音乐播放器完整教程,android实现简单音乐播放器
  6. 树莓派c语言运行_树莓派完成简单的编程(四)
  7. mysql 关键词相关度排序方法详细示例分析
  8. C/C++#if #ifdef #ifndef的区别
  9. Google 地图 google map api / 地图有关
  10. Ubuntu 16.04 使用useradd添加用户后没有家目录的解决方法
  11. [程序猿感悟] [悟] 两篇不错的文章 (转载自 stay4it )
  12. Android四大组件之广播
  13. tomcat8.0安装及配置教程
  14. 一篇文章学会Yaml的语法超详细(建议收藏)
  15. 离线语音风扇设计应用案例
  16. 创新设计思维总结报告
  17. Git HEAD detached from origin(冲突解决后无法正常push) 问题的解决方案
  18. 大数据和java就业前景_java大数据开发的就业前景及未来趋势
  19. 阿拉伯数字转韩文、中文
  20. WC2007 剪刀石头布【补集转化+比赛问题费用流】

热门文章

  1. web网站架构演变过程
  2. CodeForces 356 C.Compartments(贪心)
  3. 5.1 基于分支定界算法的单机调度
  4. Mac Docker入门安装使用
  5. 递归和回溯相关面试算法总结
  6. 软件分享 目前最友好的开源远程桌面软件,完美替代 TeamViewer 和 AnyDesk
  7. P4281 [AHOI2008]紧急集合 / 聚会(LCA做法)
  8. iOS逆向 — 逆向微信,透视聊天背景
  9. 网易前端微专业,JavaScript程序设计:JS调试
  10. 为什么c语言没有输出