BST删除重复键实现,非递归实现
2014-06-12 16:29
218 查看
PBSTNode deleteRRR(PBSTNode h,Key v)
{//删除一个匹配的键值,如果有重复的键,将删除
if (h == z)
{
return h;
}
PBSTNode p = h;
PBSTNode parent =
NULL;
while (p != z)
{
if (p->data < v)
{
parent = p;
p = p->right;
}
else if (p->data > v)
{
parent = p;
p = p->left;
}
else if (p->data == v)
{
if (parent)
{
PBSTNode x = p;
if (parent->data > v)
{
parent->left =
joinLR(p->left,p->right);
p = parent->left;
}
else if (parent->data < v)
{
parent->right =
joinLR(p->left,p->right);
p = parent->right;
}
free(x);
}
else
{
PBSTNode x = p;
h =
joinLR(p->left,p->right);
free(x);
p = h;
}
}
}
return h;
}
{//删除一个匹配的键值,如果有重复的键,将删除
if (h == z)
{
return h;
}
PBSTNode p = h;
PBSTNode parent =
NULL;
while (p != z)
{
if (p->data < v)
{
parent = p;
p = p->right;
}
else if (p->data > v)
{
parent = p;
p = p->left;
}
else if (p->data == v)
{
if (parent)
{
PBSTNode x = p;
if (parent->data > v)
{
parent->left =
joinLR(p->left,p->right);
p = parent->left;
}
else if (parent->data < v)
{
parent->right =
joinLR(p->left,p->right);
p = parent->right;
}
free(x);
}
else
{
PBSTNode x = p;
h =
joinLR(p->left,p->right);
free(x);
p = h;
}
}
}
return h;
}
相关文章推荐
- BST的删除的非递归实现
- 二叉搜索树(BST)递归与非递归的插入、删除、查找的实现
- 快速删除重复记录,SQL Server如何实现
- 前导零(空格)删除(非全数字),类静态方法递归实现
- 非递归实现不重复序列的全排列(二)
- AVL树非递归实现插入和删除例程
- java实现递归删除非空目录
- 递归实现无重复组合
- 【百度2012年10月20日笔试】2.求字符串中连续重复字母的最大重复次数, 如: aabbbbcadd 的最大字母重复次数为 4, 有四个连续的b. 要求用递归实现.
- 非递归实现不重复序列的全排列(二)
- Python代码实现:删除一个list里面的重复元素
- 【C++ STL应用与实现】56: 使用std::unique删除重复元素
- 非递归实现不重复序列的全排列(三)
- 删除数组中重复的元素(C#实现)
- SQL语句实现删除ACCESS重复记录的两种方法
- 非递归实现不重复序列的全排列(一)
- 利用Access实现Excel中多表合并,并删除重复数据的问题
- 简单全排列C递归实现 没考虑重复情况
- 简单全排列C递归实现 没考虑重复情况
- 非递归实现不重复序列的全排列(三)