对红黑树的一些理解

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

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

相关文章推荐

红黑树的优点

//转自wangyu: 红黑树是一种很有意思的平衡检索树。它的统计性能要好于平衡二叉树(有些书籍根据作者姓名,Adelson-Velskii和Landis,将其称为AVL-树),因此,红黑树...
  • yxc135
  • yxc135
  • 2012-09-03 21:13
  • 18007

彻底搞懂红黑树(一)

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

查找(一)史上最简单清晰的红黑树讲解

查找(一) 我们使用符号表这个词来描述一张抽象的表格,我们会将信息(值)存储在其中,然后按照指定的键来搜索并获取这些信息。键和值的具体意义取决于不同的应用。 符号表中可能会保存很多键和很多信息...

彻底搞懂红黑树(三)

四 红黑树的插入 从红黑树上删除一个节点,可以先用普通二叉搜索树的方法,将节点从红黑树上删除掉,然后再将被破坏的红黑性质进行恢复。       我们回忆一下普通二叉树的节点删除方法...

算法学习----红黑树

算法学习----红黑树

彻底搞懂红黑树(二)

其实关于红黑树,STL源码剖析---红黑树原理详解 已经写得非常好了。但套用新警察故事里的谢霆锋说的一句话:自己查,印象深一点。这里也是一样,在自己写,印象深一点。如果你要看正宗的STL源码剖析---...

STL源码剖析---红黑树原理详解上

一、红黑树概述      红黑树和我们以前学过的AVL树类似,都是在进行插入和删除操作时通过特定操作保持二叉查找树的平衡,从而获得较高的查找性能。不过自从红黑树出来后,AVL树就被放到了博物馆里,据说...

透彻理解红黑树之四

ok,首先,以下几点,你现在应该是要清楚明白了的: I、红黑树的五个性质: 1)每个结点要么是红的,要么是黑的。 2)根结点是黑的。 3)每个叶结点,即空结点(NIL)是黑的。 4)如果一个...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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