红黑树属于平衡二叉树。它不严格是因为它不是严格控制左、右子树高度或节点数之差小于等于1,但红黑树高度依然是平均log(n),且最坏情况高度不会超过2log(n)。

红黑树(red-black tree) 是一棵满足下述性质的二叉查找树:

1. 每一个结点要么是红色,要么是黑色。

2. 根结点是黑色的。

3. 所有叶子结点都是黑色的(实际上都是Null指针,下图用NIL表示)。叶子结点不包含任何关键字信息,所有查询关键字都在非终结点上。

4. 每个红色结点的两个子节点必须是黑色的。换句话说:从每个叶子到根的所有路径上不能有两个连续的红色结点

5. 从任一结点到其每个叶子的所有路径都包含相同数目的黑色结点

红黑树相关定理

1. 从根到叶子的最长的可能路径不多于最短的可能路径的两倍长。

根据上面的性质5我们知道上图的红黑树每条路径上都是3个黑结点。因此最短路径长度为2(没有红结点的路径)。再根据性质4(两个红结点不能相连)和性质1,2(叶子和根必须是黑结点)。那么我们可以得出:一条具有3个黑结点的路径上最多只能有2个红结点(红黑间隔存在)。也就是说黑深度为2(根结点也是黑色)的红黑树最长路径为4,最短路径为2。从这一点我们可以看出红黑树是 大致平衡的。 (当然比平衡二叉树要差一些,AVL的平衡因子最多为1)

2. 红黑树的树高(h)不大于两倍的红黑树的黑深度(bd),即h<=2bd

根据定理1,我们不难说明这一点。bd是红黑树的最短路径长度。而可能的最长路径长度(树高的最大值)就是红黑相间的路径,等于2bd。因此h<=2bd。

3. 一棵拥有n个内部结点(不包括叶子结点)的红黑树的树高h<=2log(n+1)

下面我们首先证明一颗有n个内部结点的红黑树满足n>=2^bd-1。这可以用数学归纳法证明,施归纳于树高h。当h=0时,这相当于是一个叶结点,黑高度bd为0,而内部结点数量n为0,此时0>=2^0-1成立。假设树高h<=t时,n>=2^bd-1成立,我们记一颗树高 为t+1的红黑树的根结点的左子树的内部结点数量为nl,右子树的内部结点数量为nr,记这两颗子树的黑高度为bd'(注意这两颗子树的黑高度必然一 样),显然这两颗子树的树高<=t,于是有nl>=2^bd'-1以及nr>=2^bd'-1,将这两个不等式相加有nl+nr>=2^(bd'+1)-2,将该不等式左右加1,得到n>=2^(bd'+1)-1,很显然bd'+1>=bd,于是前面的不等式可以 变为n>=2^bd-1,这样就证明了一颗有n个内部结点的红黑树满足n>=2^bd-1。

在根据定理2,h<=2bd。即n>=2^(h/2)-1,那么h<=2log(n+1)

从这里我们能够看出,红黑树的查找长度最多不超过2log(n+1),因此其查找时间复杂度也是O(log N)级别的。

红黑树的操作

因为每一个红黑树也是一个特化的二叉查找树,因此红黑树上的查找操作与普通二叉查找树上的查找操作相同。然而,在红黑树上进行插入操作和删除操作会导致不 再符合红黑树的性质。恢复红黑树的属性需要少量(O(log n))的颜色变更(实际是非常快速的)和不超过三次树旋转(对于插入操作是两次)。 虽然插入和删除很复杂,但操作时间仍可以保持为 O(log n) 次 。

红黑树的优势

红黑树能够以O(log2(N))的时间复杂度进行搜索、插入、删除操作。此外,任何不平衡都会在3次旋转之内解决。这一点是AVL所不具备的。

而且实际应用中,很多语言都实现了红黑树的数据结构。比如 TreeMap, TreeSet(Java )、 STL(C++)等。

为什么红黑树查询快_为什么红黑树的效率比较高相关推荐

  1. 为什么红黑树查询快_目前最详细的红黑树原理分析(大量图片+过程推导!!!)...

    一.为什么要有红黑树这种数据结构? 我们知道ALV树是一种严格按照定义来实现的平衡二叉查找树,所以它查找的效率非常稳定,为O(log n),由于其严格按照左右子树高度差不大于1的规则,插入和删除操作中 ...

  2. 为什么红黑树查询快_红黑树为什么比二叉查找树更高效

    平衡二叉查找树 什么是平衡二叉查找树 二叉树中任意一个节点的左右子树的高度相差不能大于 1,这是一种较为严格的定义,但是实际工程中使用,不会要求这么严格,只要实际的高度不比 log2(n)大很多,能达 ...

  3. 为什么红黑树查询快_为什么工程中都喜欢用红黑树,而不是其他平衡二叉查找树呢?...

    前言 二叉查找树是最常用的一种二叉树,它支持快速插入.删除.查找操作,各个操作的时间复杂度跟树的高度成正比,理想情况下,时间复杂度是O(logn). 不过,二叉查找树在频繁的动态更新过程中,可能会出现 ...

  4. 红黑树与平衡二叉树_图解“红黑树”原理,一看就明白!

    " 学过数据结构都知道二叉树的概念,而又有多种比较常见的二叉树类型,比如完全二叉树.满二叉树.二叉搜索树.均衡二叉树.完美二叉树等. 图片来自 Pexels 今天我们要说的红黑树就是就是一棵 ...

  5. 红黑树的删除_从红黑树的本质出发,彻底理解红黑树!

    前言 早上好,我是彤哥. 上一节,我们一起从二叉树.二叉查找树.平衡树.AVL树.2-3树.2-3-4树.B树,一路讲到红黑树,最后得出红黑树的本质:红黑树就是2-3-4树,请看下图: 我们知道2-3 ...

  6. java版铁傀儡刷新机制,我的世界:新版村庄的铁傀儡数量都快赶上村民了?刷新效率很高!...

    在沙盒游戏我的世界中,铁傀儡一直以来都是村庄和村民最忠诚的守护者,它们的创作灵感来自天空之城,平时还会给小村民送花,一旦发现其他生物欺负村民就会被它们视为攻击目标,相信有不少的熊孩子玩家曾经都体验过铁 ...

  7. 程序员为什么老得快_中国程序员工资为什么那么高?老程序员:淘汰速度快,入行成本大...

    在中国,程序员的行业平均工资比一般的传统行业的工资都高,大多数传统行业有自己的职业天花板,不是职位晋升困难,就是工资水平有自己的天花板.而在互联网行业,程序员这个职业这种现象就不是很明显,月薪上万是普 ...

  8. 怎么用鼠标选中java中table的某一行_为什么同事的工作效率那么高?学会这些鼠标双击技巧,你也可以的...

    [温馨提示]亲爱的朋友,阅读之前请您点击[关注],您的支持将是我最大的动力! 在Excel表格处理中,经常会看到同事工作效率那么高,甚至点点鼠标就完成了,自己怎么努力却不行. 其实有些Excel技巧还 ...

  9. dcdc芯片效率不高的原因_如何解决电源管理芯片效率不高的问题?

    相关推荐 2018年,世强元件电商在慕尼黑上海电子展上带来了汽车.工业控制及自动化.物联网.测试测量等九大分区... 发表于 2018-03-29 14:52 • 2583次阅读 电源.工业控制器.D ...

最新文章

  1. python oop求三角形面积公式_python学习日记(OOP——类的内置方法)
  2. 官方消息:微软再次提醒IE浏览器将于6月15日停止支持
  3. linux查看python pip 安装包列表和安装路径
  4. 2018年创业最火热点的是什么?看到这个你可能就知道哪方面发展最热了
  5. HNOI2019fish
  6. CMT learning
  7. ajax发送请求和数据返回,Ajax发送和接收请求
  8. setUserVisibleHint-- fragment真正的onResume和onPause方法
  9. 智能语音识别究竟是如何实现的?
  10. java商城系统设计-----积分商城系统
  11. liunx版pgadmin3 source code安装
  12. Serializer序列化器
  13. Excel 标记重复多余项
  14. 设置swiper中的高度
  15. 《Chrysanthemums Terrace》《菊花台》
  16. 当“国风综艺”遇上“数字金融”,看国有大行解锁营销新范式
  17. SYS Informer 完整显示系统、电脑软硬件详细信息
  18. 启动本地mysql的几种方式
  19. Jetson 相机编码
  20. 给定一棵二叉树,计算该二叉树的深度、总节点个数和叶子节点个数。

热门文章

  1. 高盛:维持水滴公司“买入”评级,目标价9.5美元
  2. 余生很长,凑活过吧。
  3. WARNING: erroneous pipeline: no element nvcamerasrc
  4. deeplinux 热点_deepin linux下载
  5. B站最惨程序员做的网站,连我奶都能干崩溃。
  6. 读论文辅助工具推荐-侧边翻译
  7. 利用Pimpl实现细节隐藏
  8. 在where中使用decode函数
  9. Unbuntu18.04 安装CUDA10.1 + CUDNN7.6
  10. 万物数字化的时代,开发者的“变”与“不变”