红黑树是什么
《算法导论》中的红黑树
- Every node is either red or black.
- The root is black.
- Every leaf(NIL) is black.
- If a node is red ,then both its children are black.
For each node,all simple paths from the node to descendant leaves contain the same number of black nodes.
每个节点或者是红色的,或者是黑色的
- 根节点是黑色的
- 每个叶子节点(最后的空节点)是黑色的
- 如果一个节点是红色的,那么他的孩子节点都是黑色的
- 从任意一个节点到叶子节点,经过的黑色节点是一样的
2-3树
2-3树也是平衡二叉树,2-3是一棵绝对平衡的树,对于任意一个节点,高度绝对相等
2-3树如何维持绝对的平衡
如果插入2节点
如果插入3节点
如果插入3节点 父亲节点为2节点
如果插入3节点 父亲节点为3节点
红黑树和2-3树
红黑树是保持黑平衡的二叉树,严格意义上,不是平衡二叉树,最大高度: O(logn)
左旋
1 | // node x |
右旋
1 | // node x |
颜色反转
1 | //颜色反转 |
红黑树的性能总结
- 对于完全随机的数据,普通的二分搜索树很好用,缺点,极端情况退化成链表(或者高度不平衡)
- 对于查询较多的使用情况,AVL树很好用
- 红黑树牺牲了平衡性(2logn),统计性能更优(综合增删改查所有的操作)