图片来自:http://blog.csdn.net/hackbuteer1/article/details/7760584
红黑树的特性
红黑树是一种平衡二叉树。不过与AVL树非常严格的平衡不同,红黑树是一种局部平衡,确保没有一条路径会比其他路径长出两倍。
STL中的关联式容器默认的底层实现都是红黑树。
红黑树遵循以下原则:
1. 根节点是黑色
2. NIL节点是黑色
3. 节点的颜色只能是黑色或者红色(删除节点时会用到这个原则)
4. 红色节点的两个字节点一定是黑色
5. 任一节点到NIL的任何路径,经过的黑色节点数一致
红黑树的插入
首先,按照搜索树的性质插入节点,并把节点标记为红色。(1)
接着,调节红黑树:
Ø 如果插入节点是根节点,将节点涂黑,插入结束。
Ø 如果插入节点不是根节点,
Ø 如果插入节点的父节点是黑色,红黑树性质不被破坏,插入结束。
Ø 如果插入节点的父节点是红色,则:
Ø 当叔节点(父节点的兄弟节点)是红色时,父节点P、叔节点S、祖父节点