1.存储结构定义
typedef struct BSTNode{
ElemType data;
Struct *lchild,*rchild;
}BSTNode,*BSTree;
2.查找
BSTNode *BST_Search(BSTree T,ElemType key)
{
while(T!=NULL&&key!=T->data)
{
if(key<T->data)
T=T->lchild;
else
T=T->rchild;
}
return T;
}
2.插入
int BST_Insert(BSTree &T,ElemType key)
{
if(T==NULL)
{
T=(BSTree)malloc(sizeof(BSTNode));
T->data=key;
T->lchild=NULL;
T->rchild=NULL;
return 1;
}
else if(key==T->data)
return 0;
else if(key<T->data)
return BST_Insert(T->lchild,key);
else
return BST_Insert(T->rchild,key);
}
3.创建
void Creat_BST(BSTree &T,ElemType str[],int n)
{
T=NULL;
int i=0;
while(i<n)
{
BST_Insert(T,str[i]);
i++;
}
}
4.删除
int BST_Del(BSTree &T,ElemType key)
{
if(T==NULL)
return 0;
else
{
if(T->data==key)
{
Delete(T);
return 1;
}
else if(T->Data>key)
return BST_Del(T->lchild,key);
else
return BST_Del(T->rchild,key);
}
}
void Delete(BSTNode *p)
{
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->lchild=s->lchild;
free(s);
}
}