红黑树学习笔记

摘要

红黑树学习笔记。

博客

IT老兵驿站

前言

在08、09年的时候,那个时候因为工作的需求,需要研究文件系统,然后就遇到了红黑树,也就研究了一下红黑树,不过时至今日,感觉已经记不太清楚了,感觉当时可能也没有研究的很透彻。

最近的工作中,又遇到了红黑树,就捡起来复习复习。孔子说,“温故而知新,可以为师矣”,我为不了师,不过发现,温故确实是可以知新的。

正文

定义

红黑树

参考维基百科

节点是红色或黑色。
根是黑色。
所有叶子都是黑色(叶子是NIL节点)。
每个红色节点必须有两个黑色的子节点。(从每个叶子到根的所有路径上不能有两个连续的红色节点。)
从任一节点到其每个叶子的所有简单路径都包含相同数目的黑色节点。

想要充分理解红黑树,有一些前提条件,需要充分理解二叉树和平衡二叉树,否则,对于红黑树,是很难充分理解的,所以,红黑树可能先看到这里,先去仔细看看平衡二叉树。

这两天,看了几遍《算法导论》的定义这一部分,总感觉抓不住要领,也许这就是这个红黑树的难点。而今天,在实际上去研究红黑树的一些特性时,感觉逐步理解了一些东西。

红黑树是要保证平衡的,通过黑色的节点数来保持这个平衡,就是上文最后一条定义。

通过红色的节点数来进行高度变化的调节。

这些约束确保了红黑树的关键特性:从根到叶子的最长的可能路径不多于最短的可能路径的两倍长。结果是这个树大致上是平衡的。因为操作比如插入、删除和查找某个值的最坏情况时间都要求与树的高度成比例,这个在高度上的理论上限允许红黑树在最坏情况下都是高效的,而不同于普通的二叉查找树。

要知道为什么这些性质确保了这个结果,注意到性质4导致了路径不能有两个毗连的红色节点就足够了。最短的可能路径都是黑色节点,最长的可能路径有交替的红色和黑色节点。因为根据性质5所有最长的路径都有相同数目的黑色节点,这就表明了没有路径能多于任何其他路径的两倍长。

在很多树数据结构的表示中,一个节点有可能只有一个子节点,而叶子节点包含数据。用这种范例表示红黑树是可能的,但是这会改变一些性质并使算法复杂。为此,本文中我们使用"nil叶子"或"空(null)叶子",如上图所示,它不包含数据而只充当树在此结束的指示。这些节点在绘图中经常被省略,导致了这些树好像同上述原则相矛盾,而实际上不是这样。与此有关的结论是所有节点都有两个子节点,尽管其中的一个或两个可能是空叶子。

黑高

黑高的概念,从某个节点x出发(不含该节点)到达一个叶节点的任意一条简单路径上的黑色节点个数,记为bh(x)。

这里面不含自己,这个地方,一开始没有注意这个,有的地方就不理解。

《算法导论》里面好像没有提到红黑树,非叶子节点,应该是饱和的,但我感觉,这个至少是一个必要条件。

参考

《算法导论》
https://zh.wikipedia.org/wiki/%E7%BA%A2%E9%BB%91%E6%A0%91

posted on 2019-12-15 17:05  chaiyu2002  阅读(62)  评论(0编辑  收藏  举报

导航