设为首页 加入收藏

TOP

经过自动压力测试的红黑树(删除功能完备)(三)
2014-11-24 00:11:55 来源: 作者: 【 】 浏览:86
Tags:经过 自动 压力 测试 删除 功能 完备
;

redblack *uncle_right;

while(1)

{

if (curnode->m_color==RED)

{

curnode->m_color=BLACK;

parent=curnode->parent;

if(!parent)

{

node->root=curnode;

}

return ;

}

else

{

parent=curnode->parent;

if(!parent)

{

node->root=curnode;

return ;

}

if(0==mode)

{

uncle=parent->right;

if(!uncle)

{

return ;

}

if (uncle->m_color== RED)

{

uncle->m_color=BLACK;

parent->m_color=RED;

rotate_left (parent,uncle );

if (!uncle->parent)

{

node->root=uncle;

}

}

else

{

uncle_left=uncle->left;

uncle_right=uncle->right;

if( (!uncle_left || uncle_left->m_color==BLACK )

&&

(!uncle_right || uncle_right->m_color==BLACK))

{

uncle->m_color=RED;

curnode=parent;

}

else

{

if( !uncle_right || (uncle_right&& uncle_right->m_color==RED))

{

uncle->m_color=parent->m_color;

parent->m_color=BLACK;

if(uncle_right)

{

uncle_right->m_color=BLACK;

}

rotate_left( parent,uncle);

if (!uncle->parent)

{

node->root=uncle;

}

return ;

}

else

{

uncle_left->m_color=BLACK;

uncle->m_color=RED;

rotate_right(uncle_left,uncle);

uncle=parent->right;

uncle->right=uncle->right;

uncle->m_color=parent->m_color;

parent->m_color=BLACK;

uncle_right->m_color=BLACK;

rotate_left( parent,uncle);

if (!uncle->parent)

{

node->root=uncle;

}

return ;

}

}

}

}

else

{

uncle=parent->left;

if(!uncle)

{

return ;

}

if (uncle->m_color== RED)

{

uncle->m_color=BLACK;

parent->m_color=RED;

rotate_right (uncle ,parent);

if (!uncle->parent)

{

node->root=uncle;

}

}

else

{

uncle_left=uncle->left;

uncle_right=uncle->right;

if( (!uncle_left || uncle_left->m_color==BLACK )

&&

(!uncle_right || uncle_right->m_color==BLACK))

{

uncle->m_color=RED;

curnode=parent;

}

else

{

if( !uncle_left || ( uncle_left && uncle_left->m_color==RED))

{

uncle->m_color=parent->m_color;

parent->m_color=BLACK;

if(uncle_left)

{

uncle_left->m_color=BLACK;

}

rotate_right( uncle , parent);

if (!uncle->parent)

{

node->root=uncle;

}

return ;

}

else

{

uncle->m_color=RED;

uncle_right->m_color=BLACK;

rotate_left( uncle ,uncle_right);

uncle=parent->left;

uncle_left=uncle->left;

uncle->m_color=parent->m_color;

parent->m_color=BLACK;

uncle_left->m_color=BLACK;

rotate_right( uncle , parent);

if (!uncle->parent)

{

node->root=uncle;

}

return ;

}

}

}

}

}

}

}

void delete (wrapdata *node ,int data)

{

redblack * drop;

redblack *suc;

redblack *curnode;

int value;

int mode;

if ( drop=find ( node->root ,data))

{

pri

首页 上一页 1 2 3 4 5 下一页 尾页 3/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇CString出错 _free_dbg(p, _NORMA.. 下一篇关于拷贝(复制)构造函数为什么..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: