您的位置:首页 > 其它

BST的删除的非递归实现

2014-06-11 17:40 148 查看
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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: