对红黑树的一些理解

原创 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内核上也有红黑树的应用!

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

最容易懂得红黑树

介绍红黑树是一个平衡的二叉树,但不是一个完美的平衡二叉树。虽然我们希望一个所有查找都能在~lgN次比较内结束,但是这样在动态插入中保持树的完美平衡代价太高,所以,我们稍微放松逛一下限制,希望找到一个能...

对红黑树的理解【增加节点篇】

红黑树属于二叉树。     首先说说二叉树的优点,二叉树的左孩子比自己小,右孩子比自己大,这样在进行查找的时候,就可以像二分查找一样每一次都可以缩小要查找的值的范围。     如果这个二叉树是平衡...

彻底搞懂红黑树(一)

红黑树和c++ 虚拟继承内存分布 几乎成了我的死敌,因为完全没用过,所以导致每次看懂了之后都忘了(也许不是真的看懂了,有些关键性的东西没理解透),这次准备把这两个难题(其实也不难)仔细看懂,然后再写一...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

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

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

数据结构的理解和应用——红黑树

心得:看了《数据结构和算法分析》,《算法导论》以及《算法》上关于红黑树的章节,总算把红黑树的实现和操作给理解了一边。虽然插入和删除的情况有些复杂,因为1,2年前看过一次,后来就忘了,感觉还是当时没有真...

红黑树的理解说明(插入)

最近闲来看了看红黑树,在网站上搜索了一下关于红黑树的文章,发现很多都是仅仅照算法导论上描述复述了一遍,并没有将为什么要这样说的很清楚,下面我来谈一谈我对红黑树的一点点思考。 本博客很多地方都是引自ht...

红黑树理解 - 数据结构

红黑树        红黑树是很多平衡树的一种,保证最坏情况下基本动态几何操作时间复杂度为O(log(n))   1、红黑树性质 (1)   每个节点是红色的,或者是黑色的 (2)   根节点是黑色的...

收藏(理解红黑树)

树型结构一直是一种很重要的数据结构, 我们知道二叉查找树BST提供了一种快速查找, 插入的数据结构. 相比散列表来说BST占用空间更小,对于数据量较大和空间要求较高的场合, BST就显得大有用处了.B...
  • rein07
  • rein07
  • 2011年08月22日 10:51
  • 1004

理解红黑树(1)

红黑树是一种二叉查找树,它是在1972年由Rudolf Bayer发明的,它的性能优于平衡2叉树(avl树),因为avl树过分追求平衡,avl树要求任何节点的左右子树高度之差不能大于1,而红黑树做到的...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:对红黑树的一些理解
举报原因:
原因补充:

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