PBSTNode deleteRR(PBSTNode h,Key v)
{
if (h == z)
{
return h;
}
PBSTNode p = h;
int flag = 0;
PBSTNode parent = NULL;
while (p != z)
{
if (p->data > v)
{
parent = p;
p = p->left;
}
else if (p->data < v)
{
parent = p;
p = p->right;
}
else if (p->data == v)
{
flag = 1;
break;
}
}
if (flag)
{
if (parent)
{
PBSTNode x = p;
if (parent->data < v)
{
parent->left = joinLR(p->left,p->right);
}
else if (parent->data > v)
{
parent->right = joinLR(p->left,p->right);
}
free(x);
}
else
{
PBSTNode x = p;
h = joinLR(p->left,p->right);
free(x);
}
}
return h;
}