1.每个节点不是红色就是黑色
4.任一节点至NULL(树尾端)的任何路径,所含之黑节点数必须相同
这意味着新增节点必须为红、新增节点之父节点必须为黑(主要条件),如果不满足则必须调整颜色并且旋转树形
5 总结(当P父亲为红,插入节点X为红时,会产生冲突的解决方法)
外侧插入,伯父节点为红,曾祖父为红,持续向上改变颜色(如果某节点的两个子节点皆为红,就把该节点改为红,两个子节点改为黑)
static base_ptr minimum(base_ptr x){ while(!x->left){ x = x->left; } return x; }
static base_ptr maximum(base_ptr x){ while(!x->right){ x = x->right; } return x; }
_rb_tree_node是一个结构,包含了红黑树数据结构的基本内容
struct rb_tree_node_base{ typedef _rb_tree_color_type color_type; typedef_rb_tree_node_base* base_ptr; color_type color; base_ptr parent; base_ptr left; base_ptr right; }
9. 一开始就觉得很奇怪的点是根节点的parent是指向什么,看到这里我明白了,根节点的parent就是header