分析二叉排序树,平衡二叉树,红黑树的算法效率:
BST | AVL Tree | Red-Black Tree | |
---|---|---|---|
时间 | 1960 | 1962 | 1972 |
时间复杂度(增删查) | O ( n ) O(n) O(n) | O ( l o g 2 n ) O(log_2n) O(log2n) | O ( l o g 2 n ) O(log_2n) O(log2n) |
插入/删除很容易破坏“平衡”特性,需要频繁调整树的形态。
如:插入操作导致不平衡,则需要先计算平衡因子,
找到最小不平衡子树(时间开销大),再进行LL/RR/LR/RL调整。
红黑树RBT:插入/删除很多时候不会破坏“红黑”特性,无需频繁调整树的形态。
即便需要调整,一般都可以在常数级时间内完成
红黑树是二叉排序树:左子树结点值≤根结点值≤右子树结点值。
struct RBnode {//红黑树的结点定义
int key ;//关键字的值
RBnode* parent;
//父节点指针
RBnode* lchild;
//左孩子指针
RBnode* rChild;
//右孩子指针
int color;//结点颜色,如:可用0/1表示黑/红,也可使用枚举型enum表示颜色
};
结点的黑高bh :从某结点出发(不含该结点)到达任一空叶结点的路径上黑结点总数。
1.问:根节点黑高为h的红黑树,内部结点数(关键字)至少有多少个 ?
答:内部结点数最少的情况――总共h层黑结点的满树形态.
若根节点黑高为h,内部结点数(关键字)最少有 2 h 2^h 2h个。
在RBT中,“叶结点”通常指“失败结点”
(又名:空叶结点/NULL结点/外部结点)。
由性质2可以推出,红黑树查找操作时间复杂度=O( l o g 2 n log_2n log2n)。
与BST、AVL 相同,从根出发,左小右大,
若查找到一个空叶节点,则查找失败。
1 . 黑叔:旋转+染色
2 . 红叔:染色+变新