//二叉搜索树
//搜索
struct TreeNode{
int data;
struct TreeNode *lchild;
struct TreeNode *rchild;
};
TreeNode * SearchBST(TreeNode t,keytype key){
if(t==NULL||key==t->data);
return t;
else if(key<t->data)
return SearchBST(t->lchild,key);
else
return SearchBST(t->rchild,key);
}
//插入关键字Key
void Insert(TreeNode *&t,keytype key){
if(t==NULL){
t=new BiTree;
t->lchild=t->rchild=NULL;
t->data=key;
return ;
}
if(key<t->data)
Insert(t->lchild,key);
else
return Insert(t->rchild,key);
}
//删除一个节点
//x为叶子节点直接删除
//x只有左子树或者右子树,令左子树或者右子树为双亲节点f的子树
//x既有左边又有右边,
void Del(TreeNode *&p){
TreeNode *q,*s;
if(t->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!=NULL){
q=s;
s=s->rchild;
}
p->data=s->data;
if(q!=p){
q->rchild=s->lchild;
}else{
q->lchild=s->lchild;
}
free(s);
}
}
void f(TreeNode *&t,int key)//排序好的二叉树删除key
{
if(!t)
return;
else if(t->data==key){
free(t);
}else if(t->data>key);
f(t->lchild,key);
else
f(t->rchild,key);
}
二叉搜索树的一些基本操作
最新推荐文章于 2022-04-21 13:24:07 发布