6.0红黑树的定义
红黑树是特殊的平衡二叉树。遵循红定理和黑定理。
红定理:在一条路径上不能出现两个相连的红节点;
黑定理:根节点必须是黑节点,而且所有节点通向树的尾端的路径上,所含的黑节点的个数必须相等。
6.1 stl中的set底层用的什么数据结构?
Set底层用的是红黑树。
6.2 红黑树的数据结构怎么定义?
定义有两部分,一个是枚举类,另一个是红黑树的结构体。
1. enum Color
2. {
3. RED = 0,
4. BLACK = 1
5. };
6.
7. struct RBTreeNode
8. {
9. struct RBTreeNode*left, *right, *parent;
10. int key;
11. int data;
12. Color color;
13. };
6.3 红黑树有哪些性质?
满足一下全部性质的树,我们称之为红黑树:
6.3.1 每个节点要么是红的,要么是黑的;
6.3.2 根结点是黑的;
6.3.3 每个叶节点(叶节点即指树尾端NIL指针或NULL结点)是黑的;
6.3.4 如果一个结点是红的,那么它的俩儿子都是黑的;
6.3.5 对于任意结点而言,其到叶结点树尾端NIL指针的每一条路径都包含相同数目的黑结点。
6.4 红黑树各种操作的时间复杂度是多少?
能保证在最坏的情况下,基本的动态操作的时间均为O(lgn)。
6.5 红黑树相比于BST和AVL树有什么优点?
红黑树是牺牲了严格的高度平衡的优越条件为代价,它只要求部分地达到平衡要求,降低了对旋转的要求,从而提高了性能。红黑树能够以O(log2 n)的时间复杂度进行搜索、插入、删除操作。
相比于BST,因为红黑树可以能确保树的最长路径不大于两倍的最短路径的长度,所以可以看出它的查找效果是有最低保证的。在最坏的情况下也可以保证O(logN)的,这是要好于二叉查找树的。因为二叉查找树最坏情况可以让查找达到O(N)。
红黑树的算法时间复杂度和AVL相同,但统计性能比AVL树更高,所以在插入和删除中所做的后期维护操作肯定会比红黑树要耗时好多,但是他们的查找效率都是O(logN),所以红黑树应用还是高于AVL树的. 实际上插入 AVL 树和红黑树的速度取决于你所插入的数据.如果你的数据分布较好,则比较宜于采用AVL树(例如随机产生系列数),但是如果你想处理比较杂乱的情况,则红黑树是比较快的
6.6 红黑树相对于哈希表,在选择使用的时候有什么依据?
权衡三个因素: 查找速度, 数据量, 内存使用,可扩展性。
6.7 扩展数据结构有什么步骤?
1).选择基础数据结构;
2).确定要在基础数据结构种添加哪些信息;
3).验证可用基础数据结构上的基本修改操作来维护这些新添加的信息;
4).设计新的操作。