//二叉排序树的插入和删除
status searchBST(BiTree T, KeyType key, BiTree f, BiTree p) //查
{
if(!T)p = f;return false;
if(key == T.data.key)
p = T;return true;
else if(key > t.data.key)
return searchBST(T->rchild, key, T, p);
else
return searchBST(T->lchild, key, T, p);
}
status InsertBST(BiTree T, elemtype e)//增
{
if(!searchBST(T, e.data.key, NULL, p))
{
s = (BiTree *)malloc(sizeof(BiTree));
s.data = e;
s->lchild = s->rchild = NULL;
if(!p)T = s;
else if(p.data.key>key)
p->lchild = s;
else
p->rchild = s;
return true;
}
return false;
}
status deleteBST(BiTree T, KeyType key)//删
{
if(!T)return false;
else{
if(T.data.key == key)
return delete(T);
else if(T.data.key > key)
return deleteBST(T->lchild, key);
else
return deleteBST(T->rchild, key);
}
}
status delete(BiTree T)
{
if(!T->rchild)
q = T; T = T->lchild;free(q);
else if(!T->lchild)
q = T; T = T->rchild;free(q);
else
{
q = T; s = T->lchild;
while(s->rchild)q = s;s = s->rchild;
T->data = s->data;
if(q!=T)
q->rchild = s->lchild;
else
q->lchild = s->lchild;
delete s;
}
return true;
}
数据结构笔记-二叉排序树的增删查
最新推荐文章于 2024-01-06 10:51:29 发布