点击(此处)折叠或打开
-
typedef struct BiTNode
-
{
-
int data;
-
struct BiTNode *lchild, *rchild;
-
}BiTNode, *BiTree;
-
-
//递归查找二叉排序树T中是否存在key
-
//指针f指向T的双亲,其初始化调用值为NULL
-
//若查找成功,则指针p指向该数据元素节点,并返回TURE
-
//否则指针p指向查找路径上访问的最后一个节点并返回FALSE
-
bool SearchBST(BiTree T, int key, BiTree f, BiTree *p)
-
{
-
if(!T)
-
{
-
*p=f;
-
return FALSE;
-
}
-
else if(key==T->data)
-
{
-
*p=T;
-
return TRUE;
-
}
-
else if(key<T->data)
-
{
-
return SearchBST(T->lchild, key, T, p);
-
}
-
else
-
{
-
return SearchBST(T->rchild, key, T, p);
-
}
-
}
-
-
//当二叉树排序树T中不存在关键字等于key的数据元素时
-
//插入key并返回TRUE, 否则返回FALSE
-
-
bool InsertBST(BiTree *T, int key)
-
{
-
BiTree p,s;
-
if(!SearchBST(*T, key, NULL, &p))
-
{
-
s=(BiTree)malloc(sizeof(BiTNode));
-
s->data=key;
-
s->lchild=s->rchild=NULL;
-
if(!p)
-
{
-
*T=s;
-
}
-
else if(key<p->data)
-
{
-
p->lchild=s;
-
}
-
else
-
{
-
p->rchild=s;
-
}
-
return true;
-
}
-
else
-
{
-
return false;
-
}
-
}
-
-
-
bool Delete(BiTree *p)
-
{
-
BiTree q,s;
-
if( (*p)->rchild==NULL )
-
{
-
q=*p; *p=(*p)->lchild; free(q);
-
}
-
else if( (*p)->lchild==NULL )
-
{
-
q=*p; *p=(*p)->rchild; free(q);
-
}
-
else
-
{
-
q=*p; s=(*p)->lchild;
-
while(s->rchild)
-
{
-
q=s; s=s->rchild;
-
}
-
(*p)->data=s->data;
-
if(q!=*p)
-
q->rchild=s->lchild;
-
else
-
q->lchild=s->rchild;
-
}
-
return true;
-
}
-
-
-
bool DeleteBST(BiTree *T, int key)
-
{
-
if(!*T)
-
{
-
return false;
-
}
-
else
-
{
-
if(key==(*T)->data)
-
{
-
return Delete(T);
-
}
-
else if (key<(*T)->data)
-
{
-
return DeleteBST(&(*T)->lchild, key);
-
}
-
else
-
{
-
return DeleteBST(&(*T)->rchild, key);
-
}
-
}
- }
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29012686/viewspace-1140292/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/29012686/viewspace-1140292/
本文详细介绍了二叉搜索树的基本操作,包括递归查找、插入和删除节点的方法。通过实例代码解释了如何在二叉搜索树中进行数据查找、新增数据元素及数据元素的删除。
528

被折叠的 条评论
为什么被折叠?



