对红黑树的一些理解

原创 2015年11月18日 20:17:29

1,红黑树(RBT)的定义:它或者是一颗空树,或者是具有一下性质的二叉查找树:

1.节点非红即黑。

2.根节点是黑色。

3.所有NULL结点称为叶子节点,且认为颜色为黑

4.所有红节点的子节点都为黑色。

5.从任一节点到其叶子节点的所有路径上都包含相同数目的黑节点。

2,如何理解和记忆这5个定义?

称为“红黑树”,即节点非红即黑,给节点着色的目的是为了使树保持一定的平衡性质,那么如何来保持一棵树的平衡性质呢?

我们定义从某个节点X出发(不包含该节点)到达一个叶子节点的任意一条简单路径上的黑色节点个数称为该节点的黑高(black-height),记为bh(X)。根据性质5,红黑树的黑高为根节点的黑高。我们假设红黑树的黑高为n,即从根节点到叶子节点共n+1个黑色节点,那么从根节点到叶子节点的最短路径长度为n,即路径上的点全为黑色;又根据性质4,从根节点到叶子节点的最长路径长度为红黑相间的路径,即有n个红色节点,路径长度为2n;

那么我们得出一个结论:红黑树中,根节点到叶子节点的路径长度不超过任何其他路径的两倍个人理解这就是红黑树的平衡性能!

这5个定义也表明,若红黑树高为h,则黑高至少为h/2,即树中内顶点个数n一定大于等于2的h/2幂减1;即h一定小于等于2log(n+1);这也可看出它的平衡性!

可以看到,红黑树并不是平衡二叉树,相反,红黑树放松了AVL树中严格的平衡条件,从而提高了红黑树的一些性能!

3,红黑树与平衡二叉树的异同点?

相同点:都是在进行插入或删除操作时,通过特定的操作维持树的平衡性质,从而获得较高的查找性能!

不同点:

(1),定义不同。

(2),红黑树放弃了平衡二叉树的完全平衡,追求大致平衡,在与平衡二叉树性能相差不大的情况下,保证每次插入或删除最多执行3次旋转就能达到平衡!

(3),而平衡二叉树追求绝对平衡,条件苛刻,每次插入或删除需要执行的旋转操作次数是未知的!

(4),红黑树查找比AVL树稍差,因为AVL树是高度平衡,但插入删除要好,因为旋转次数少!据说红黑树有更好的效率和更高的统计性能!

具体:


4,应用?

简单来说,红黑树是通过降低平衡性能来减少插入或删除时的旋转次数,所以个人理解,若是应用中,搜索次数远远大于插入和删除,则应选择AVL树,若是插入删除多或者与搜索操作差不多,则选择RB树。

但是据说红黑树的统计性能要好于平衡二叉树(AVL树),因此,红黑树在很多地方都有应用。在C++ STL中,很多部分(目前包括set, multiset, map, multimap)应用了红黑树的变体(SGI STL中的红黑树有一些变化,这些修改提供了更好的性能,以及对set操作的支持),还有在linux内核上也有红黑树的应用!

版权声明:本文为博主原创文章,未经博主允许不得转载。

极易理解的红黑树讲解

原文链接:http://www.cnblogs.com/abatei/archive/2008/12/17/1356565.html C#与数据结构--树论--红黑树(RED BLACK TRE...
  • lc0817
  • lc0817
  • 2015年09月10日 17:04
  • 1715

重温数据结构:深入理解红黑树

读完本文你将了解到: 什么是红黑树黑色高度 红黑树的 5 个特性 红黑树的左旋右旋 指定节点 x 的左旋 右图转成左图 指定节点 y 的右旋左图转成右图 红黑树的平衡插入 二叉查找树的插入 插入后调整...
  • u011240877
  • u011240877
  • 2016年11月25日 00:58
  • 9791

清晰理解红黑树的演变---红黑的含义

本文介绍红黑树,暂时不涉及任何代码,只是帮助你理解红黑树的演变来源,树结构中红黑色具体含义,保证你理解红黑树的背后逻辑。...
  • chen_zhang_yu
  • chen_zhang_yu
  • 2016年09月02日 21:30
  • 5313

红黑树插入、删除、查找算法学习

红黑树(red-black tree)是许多“平衡”搜索树中的一种,可以保证在最坏情况下基本动态集合操作的时间复杂度为O(lgn),文章讲述红黑树的性质,结构描述,插入、删除算法分析,最后完成一个C语...
  • songhui1024
  • songhui1024
  • 2015年11月11日 19:53
  • 1043

思考红黑树

前言         网上讲红黑树的文章比较多,参考 维基百科--红黑树 《教你彻底理解红黑树》  等等。大概扫了扫,在讲红黑树的插入和删除操作的时候,主要集中精力在讲插入和删除的各种复杂情况,然后再...
  • hackooo
  • hackooo
  • 2013年08月22日 21:00
  • 1847

红黑树的插入创建(左旋 右旋)

红黑树是每个节点都带有颜色属性的二叉查找树,颜色或红色或黑色。除了二叉查找树的性质,同时还有以下的五大性质: 性质1. 节点是红色或黑色。 性质2. 根节点是黑色。 性质3 每个叶节...
  • Below_Crusder
  • Below_Crusder
  • 2015年07月06日 20:56
  • 1136

关于大数据的一些个人理解

前几天商学院的校友问了我几个关于大数据的问题,一看都是非常专业且典型的问题, 相信大家听这个词听得太多了也有很多疑问,于是我总结了下自己的理解,欢迎一起讨论。 1. 现在大数据很时髦,多大的数...
  • witforeveryang
  • witforeveryang
  • 2014年12月23日 20:02
  • 1083

算法之红黑树简单理解和定义

红黑树(Red Black Tree) 是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。 它是在1972年由Rudolf Bayer发明的,当时被称为平衡二叉B...
  • mo_hen_
  • mo_hen_
  • 2016年10月19日 15:51
  • 850

红黑树性质的彻底理解

一、红黑树的介绍 先来看下算法导论对R-B Tree的介绍: 红黑树,一种二叉查找树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。 通过对任何一条从根到叶子的路径上...
  • chen83640005
  • chen83640005
  • 2017年09月05日 11:24
  • 76

红黑树的添加删除操作

来自: http://hi.baidu.com/coolinc/blog/item/3aa07f3e162502eb54e723b1.html介绍另一种平衡二叉树:红黑树(Red Black Tree...
  • Very_2
  • Very_2
  • 2010年07月09日 10:57
  • 17853
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:对红黑树的一些理解
举报原因:
原因补充:

(最多只允许输入30个字)