学习 《算法导论》第13章 红黑树 总结二
在学习 《算法导论》第13章 红黑树 总结一中学习了红黑树的五个性质,红黑树的结构定义以及旋转。这节学习红黑树的插入和删除操作。
红黑树的插入
在一棵n个结点的红黑树中插入一个新结点的操作可以在O(lgn)时间内完成。红黑树的插入分为两步:第一步:把红黑树当成是一棵普通的二叉查找树,把新结点插入这棵二叉查找树;第二步:为保证红黑树的性质,将插入的新结点着色.
第一步:插入
第一步:插入的算法
// 将z插入红黑树T中,假设z的data域已知
RB-INSERT(T, z)
y<--nil
x<--T.root
while x != nil
do y<-- x
if z.data < x.data
then x <-- x.left
else x <-- x.right
z.parent <-- y
if y == nil
then T.root <-- z
else if z.data < y.data
then y.left <-- z
else y.right <-- z
z.left <-- nil
z.right <-- nil
z.color <-- RED
RB-INSERT-FIXUP(T, z)
第一步:插入的C语言实现
RB_Node* RB_Insert(RB_Tree RB_Root, RB_Node* NewNode)
{
RB_Node* parentnode = NULL;
RB_Node* node = RB_Root;
// 查找NewNode的父结点
while(NULL != node)
{
parentnode = node;
if (NewNode->data < node->data)
{
node = node->left;
}
else
{
node = node->right;
}
}
NewNode->parent = parentnode;
// 将NewNode插入
if(parentnode =