【算法】红黑树

在学习红黑树的时候,我发现很多博客都没有把红黑树讲清楚,于是我就去wikipedia看红黑树的定义。中文网站(链接)介绍的红黑树总有机翻的味道,介绍的不是特别清楚,我在这里拿英文网站(链接)配套的做一下介绍。

红黑树:

是一种自平衡的二叉查找树,它的成查找,插入和删除时间复杂度均为O(logn) 。许多人一开始学习红黑树拿的是二叉平衡树做比较,这样的话会很难理解,实际上红黑树等同于2-3-4树,在2-3-4树上的插入核删除操作也等同于红黑树中的颜色翻转核旋转。

红黑树的性质:

红黑树依然是一个二叉查找树,但是每个节点都带有颜色属性,节点要么是红色,要么是黑色。

在拥有二叉查找树的性质前提下,红黑树的性质如下:

1.节点是红色或者黑色

2.根是黑色

3.所有叶子都是黑色叶子(所有的叶子都为空NIL)

4.从每个叶子到根的所有路径上不能有两个连续的红色节点(红色节点不直接相连)

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

如下图:

红黑树高效的原因:

虽然我的图例上红黑树是红黑相间的,而且很多人在开始学习的时候认为红黑树的颜色的按层次相间,但是实际上这个看法是错误的。红黑树的5个性质只为了确保一个性质:从根到叶子的最长距可能路径离不多于最短可能路径的两倍长。这个性质区别于平衡二叉树,使得红黑树是大致平衡的。由于插入、删除核查找某个值得最坏情况时间都要求与树得高度成比例,这个高度理论上上限允许最坏情况下都是高效的。

为什么叶子节点为空节点:

为了方便插入和删除,使得红黑树中叶子节点为空节点(Null),这一点在讲插入的时候会提到。

操作

猜你喜欢

转载自www.cnblogs.com/guangluwutu/p/12070858.html