设为首页 加入收藏

TOP

删除功能更加完备的红黑树(四)
2014-11-24 00:04:17 来源: 作者: 【 】 浏览:78
Tags:删除 功能 更加 完备

{

uncle->m_color=parent->m_color;

parent->m_color=BLACK;

uncle_left->m_color=BLACK;

rotate_right( uncle , parent);

curnode=uncle;

}

}

}

}

}

}

}

void delete (wrapdata *node ,int data)

{

redblack * drop;

redblack *suc;

redblack *curnode;

int value;

int mode;

printf("will delete %d \n",data);

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

{

if(!drop->left && !drop->right )

{

if (!drop->parent)

{

free(drop);

}

else

{

if (drop->parent->left==drop)

{

drop->parent->left=0;

}

else

{

drop->parent->right=0;

}

free (drop);

}

}

else if (!drop->right )

{

if(!drop ->parent)

{

}

else

{

if (drop->parent->left==drop)

{

drop->parent->left=drop->left;

mode=0;

}

else

{

drop->parent->right=drop->left;

mode=1;

}

}

curnode=drop->left;

curnode->parent=drop->parent;

free (drop);

delete_fixup (node, curnode,mode);

}

else

{

suc=next ( drop->right);

value=drop->m_data->value;

drop->m_data->value=suc->m_data->value;

suc->m_data->value=value;

if(suc->parent->left==suc)

{

mode=0;

}

else

{

mode=1;

}

if(!suc->right)

{

if(0==mode)

{

suc->parent->left=0;

}

else

{

suc->parent->right=0;

}

free(suc);

}

else

{

if(0==mode)

{

suc->parent->left=suc->right;

}

else

{

suc->parent->right=suc->right;

}

curnode=suc->right;

curnode->parent=suc->parent;

free(suc);

delete_fixup (node ,curnode,mode);

}

}

}

else

{

}

node->root->m_color=BLACK;

}

void insert ( wrapdata *node , int data )

{

redblack *newnode;

redblack *curnode;

printf("will insert %d \n",data);

newnode=newstruct (data);

node->size++;

if ( ! node->root)

{

node->root= newnode;

}

else

{

curnode=node->root;

while(1)

{

if ( compare ( newnode ,curnode))

{

if (!curnode->right)

{

curnode->right=newnode;

newnode->parent=curnode;

break;

}

else

{

curnode=curnode->right;

}

}

else

{

if (!curnode->left)

{

curnode->left=newnode;

newnode->parent=curnode;

break;

}

else

{

curnode=curnode->left;

}

}

}

insert_fixup ( node , newnode);

}

node->root->m_color=BLACK;

}

int main()

{

int i;

wrapdata *node;

data *newdata;

/*

int value[]={12,24,25,9,4,91,2,100,29,888,10,22,5,11,111,7,13,1,99,222,98,17,8,55,44,33,21,77,199,2345,46,49,51,53,54,52,50,48,47,45,43,42,41,40,39,38,37,78,79,80,81,82,83,84,85};

*/

int value[]={12,24,25,9,4,91,2,100,98,95,93,96,99,120,13};

// int value[]={12,24,25,9,4,91,2};

node=(wrapdata*)calloc (1 ,sizeof (wrapdata));

for (i=0;i

{

insert (node ,value[i]);

}

printf("%d \n",depth (node->root));

mid_print (node->root,0);

printf("\n");

while(1)

{

printf("into delete mode\n");

while( scanf("%d",&i) && i)

{

delete (n

首页 上一页 1 2 3 4 下一页 尾页 4/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇在高警告级别干净利落的进行编译 下一篇相对完整的红黑树(经过比较强的测..

评论

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