//树节点
typedef struct node
{
int data;
node*rchild;
node*lchild;
}node;
node *search(node*p,int x)
{
if(p==NULL)return NULL;
else
{
if(x==p->data)return p;
else
{
if(x<p->data) return search(p->lchild,x);
else return search(p->rchild,x);
}
}
}
void delnode(node*root,int x)
{
node*p,*q,*r,*t;
p=root;
q=NULL;//q为p的父节点
while(p!=NULL&&p->data!=x)
{
if(x<p->data)
{
q=p;
p=p->lchild;
}
else
{
q=p;
p=p->rchild;
}
if(p==NULL)
cout<<"未发现数据域节点"<<endl;
else if(p->lchild==NULL)//被删节点无左节点
{
if(q==NULL)t=p->rchild;
else if(q->lchild==p)q->lchild=p->rchild;
else q->rchild=p->rchild;
}
else
{
r=p->rchild;
while(r->rchild!=NULL)
{
r=r->rchild;
}
r->rchild=p->rchild;
if(q==NULL)t=p->lchild;
else if(q->lchild==p)q->lchild=p->lchild;
else q->rchild=p->lchild;
}
}
}
二叉排序树的删除
最新推荐文章于 2020-10-24 19:19:35 发布