1. 红黑树简介
红黑树(Red Black Tree) 是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。红黑树是在1972年由Rudolf Bayer发明的,当时被称为平衡二叉B树(symmetric binary B-trees)。后来,在1978年被 Leo J. Guibas 和 Robert Sedgewick 修改为如今的“红黑树”。红黑树是一种特化的AVL树(平衡二叉树),都是在进行插入和删除操作时通过特定操作保持二叉查找树的平衡,从而获得较高的查找性能。它虽然是复杂的,但它的最坏情况运行时间也是非常良好的,并且在实践中是高效的: 它可以在O(log n)时间内做查找,插入和删除,这里的n是树中元素的数目。
说到这可能还是存在一些疑惑,我们已经学了二叉排序树,为什么还要引入红黑树呢?其实,C++的map 和 set 的底层就是用红黑树实现的。以查找为例,虽然红黑树和二叉排序树平均时间复杂度为O(logN),但是红黑树最坏时间复杂度为O(2lgN) (最坏情况:恰好红黑交替),但二叉排序树最坏时间复杂度为O(N) (一边倒),如下图: