SearchBST(T,key)
{
if(T为空||T的值等于key)返回 T;
else if(T的值>key)返回 SearchBST(T->lchild,key);
else 返回 SearchBST(T->rchild,key);
}
void Search(BiTree T, char key) {
if (T == NULL || T->data == key)
return T;
else if (T->data > key)
return Search(T->lchild, key);
else
return Search(T->rchild, key);
}
InsertBST(T, key)
{
if (T为空)
创建新的根节点;
把key赋予根的值;
else if (T == key)返回0;
else if (T的值 > key)返回InsertBST(T->lchild,key);
else if (T的值 < key)返回InsertBST(T->rchild,key);
}
InsertBST(T, key)
{
if (T == NULL) {
T = new BiTNode;
T->data = key;
T->lchild == NULL;
T->rchild == NULL;
return 1;
}
else if (T->data == key)
return 0;
else if (T->data > key)
return InsertBST(T->lchild, key);
else if (T->data < key)
return InsertBST(T->rchild, key);
}
BiTNode *CreateBST(T)
{
初始化树T为空树
int i=0;
while (i < n) {
调用函数InsertBST(T,key);
i++;
}
返回T;
}
BiTNode *CreatBST(int a[], int n) {
BiTNode *T = NULL;
int i = 0;
while (i < n) {
InsertBST(T, a[i]);
i++;
}
return T;
}
DeleteBST(T, key)
{
if(T为空)返回0
else {
if(k<T->data)返回DeleteBST(T->lchild,key)
else if(k>T->data)返回DeleteBST(T->rchild,key)
else {
Delete(T)
返回1
}
}
}
Delete(&T)
{
新建结构指针q,s;
if(T为叶子节点)
*T指向空;
else if(T的左子树为空)
q=T;
T=T->rchild;
释放q;
else if(T的右子树为空)
q=T;
T=T->lchild;
释放q;
else
q=T;
s=T->lchild;
while(s->rchild不为空)
q=s;
s=s->rchild;
T的值赋予s;
if(q!=T)
q->rchild=s->lchild;
else
q->lchild=s->lchild;
释放s;
}
void DeleteBST(BiTNode *&T, char key) {
if (T == NULL)return;
else {
if (key < T->data)
return DeleteBST(T->lchild, key);
else if (key > T->data)
return DeleteBST(T->rchild, key);
else {
Delete(T);
}
}
}
void Delete(BiTree &T)
{
BiTree q,s;
if(!T->lchild&&!T->rchild)
T=NULL;
else if(!T->lchild)
q=T;
T=T->rchild;
else if(!T->rchild)
q=T;
T=T->lchild;
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;
free(s);
}
}
原文:https://www.cnblogs.com/cxdscx/p/12733291.html