红黑树

https://mp.weixin.qq.com/s/ZUAbDZkVaCG1-Va_kGF6DA

二叉搜索树

二叉搜索树是个很好的数据结构,可以快速地找到一个给定关键字的数据项,并且可以快速地插入和删除数据项。但是二叉搜索树有个很麻烦的问题,如果树中插入的是随机数据,则执行效果很好,但如果插入的是有序或者逆序的数据,那么二叉搜索树的执行速度就变得很慢。因为当插入数值有序时,二叉树就是非平衡的了,排在一条线上,其实就变成了一个链表……它的快速查找、插入和删除指定数据项的能力就丧失了

为了能以较快的时间 O(logN) 来搜索一棵树,需要保证树总是平衡的(或者至少大部分是平衡的),这就是说对树中的每个节点在它左边的后代数目和在它右边的后代数目应该大致相等。红-黑树的就是这样的一棵平衡树,对一个要插入的数据项,插入例程要检查会不会破坏树的特征,如果破坏了,程序就会进行纠正,根据需要改变树的结构,从而保持树的平衡。

红黑树特征

  1. 每个节点不是黑色就是红色
  2. 根节点总是黑色的
  3. 如果节点是红色的,那么它的子节点必须是黑色的(反之不一定)
  4. 从根节点到叶节点或者空子节点的每条路径,必须包含相同数目的黑色节点(相同的黑色高度)
    在红黑树中插入的节点都是红色的,这不是偶然的,因为插入一个红色节点比插入一个黑色节点违背红-黑规则的可能性更小。原因是:插入黑色节点总会改变黑色高度(违背规则4),但是插入红色节点只有一半的机会会违背规则3。另外违背规则3比违背规则4要更容易修正。当插入一个新的节点时,可能会破坏这种平衡性,那么红-黑树是如何修正的呢?

红黑树的修正

主要由三种方式对平衡进行修正,改变节点颜色、左旋和右旋。

1. 变色

2. 左旋

3. 右旋

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • R-B Tree简介 R-B Tree,全称是Red-Black Tree,又称为“红黑树”,它一种特殊的二叉查找...
    张晨辉Allen阅读 13,098评论 5 30
  • 1、红黑树介绍 红黑树又称R-B Tree,全称是Red-Black Tree,它是一种特殊的二叉查找树,红黑树的...
    文哥的学习日记阅读 13,338评论 1 35
  • 写这篇文章之前,本来是打算写HashMap的源码分析,但是jdk1.8之后的HashMap对位桶+链表的结构进行了...
    宛丘之上兮阅读 10,731评论 0 7
  • 黑化的史迪仔也有另外一种美
    JMLCY阅读 1,800评论 0 0
  • 昨天公司安排的培训任务紧急且重要,突然一下子要求了很多,也要求很高,其实我理解做培训其实也就是作翻译,要把...
    做自己的思想家阅读 3,017评论 0 4