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;
}
{
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;
}
相关文章推荐
- 二叉搜索树(BST)递归与非递归的插入、删除、查找的实现
- BST删除重复键实现,非递归实现
- linux下递归删除文件夹,简单实现rm的功能
- 递归实现删除文件或目录和 测试类程序
- 二叉查找树带父节点指针的创建,销毁,查找,删除,插入,找前驱后继,找最小值最大值(递归和非递归的实现)
- 非递归实现的bst的根插入操作
- php实例分享之通过递归实现删除目录下的所有文件详解
- java递归实现文件的删除和拷贝
- 分裂bst 非递归实现
- Java递归实现文件删除
- Java递归实现文件删除
- C语言实现递归删除文件夹及文件
- java递归实现文件的删除和拷贝
- java递归实现文件的删除和拷贝
- 二叉排序树删除、搜索、插入的递归实现
- AVL树非递归实现插入和删除例程
- Java IO 用递归实现目录删除和树形目录展示 Java实现
- 删除和拷贝文件递归方法(Java实现)
- php实例分享之通过递归实现删除目录下的所有文件详解
- BST查询,插入,删除api实现与测试