stl mapset之红黑树

Posted 程序员每天不一样

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了stl mapset之红黑树相关的知识,希望对你有一定的参考价值。

stl map、set之红黑树

stl map、set都采用红黑树做key,来构造二叉查找树,排序性能是很不错的。

首先回顾下二叉查找树:

一颗二叉查找树(BST)是一颗二叉树,其中每个节点都含有一个可比较的键(以及相关联的值)且每个结点的键都大于其左子树中的任意结点的键而小于右子树的任意结点的键。也叫作二叉排序树或二叉搜索树。(二叉这名字实在是有点。。。)也就是说:

二叉查找树或者是一棵空树,或者是具有下列性质的二叉树

(1)若左子树不空,则左子树上所有结点的值均小于或等于它的根结点的值;

(2)若右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值;

(3)左、右子树也分别为二叉查找树;

可以看出,二叉查找和二分查找基本一样简单,但是二分查找插入删除确实件比较耗时的操作,毕竟单链接的链表是无法使用二分查找的。相比之下,二叉查找的插入和删除会简单很多。

红黑树

研究一下红黑树的性质:

性质1. 节点是红色或黑色。

性质2. 根节点是黑色。

性质3 每个叶节点(NIL节点,空节点)是黑色的。

性质4 每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点)

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

可以看出,由于任何一条路径都不会有两个连续的红色节点,且任一节点到每个叶子节点都包含相同的黑色节点,可以看出从根到叶子的最长的可能路径不多于最短的可能路径的两倍长。这个特性决定了红黑树在最坏情况下,性能也不会太差。这是因为无论是插入,查找,删除在最坏的情况下,都与树的高度成比例。

时间复杂度:

红黑树插入、删除、查找一个元素的时间复杂度是O(logN),遍历红黑树的时间复杂度是O(N)。可以看出其查找是非常快的。


以上是关于stl mapset之红黑树的主要内容,如果未能解决你的问题,请参考以下文章

数据结构之红黑树

数据结构之红黑树

红黑树的实现mapset的封装

C++从入门到入土第二十二篇:数据结构之红黑树

C++从入门到入土第二十二篇:数据结构之红黑树

C++从入门到入土第二十二篇:数据结构之红黑树