typedef struct BiTNode
{
int data;
struct BiTNode *lchild, *rchild;
} BiTNode, *BiTree;
BiTree search(BiTree Node,int key)
{
if(!Node)
{
Node= (BiTree)malloc(sizeof(BiTNode));
Node->data=key;
Node->lchild=Node->rchild=NULL;
}
else
{
if(key<Node->data)
{
Node->lchild=search(Node->lchild,key);
}
else if(key>Node->data)
{
Node->rchild=search(Node->rchild,key);
}
}
return Node;
}
BiTree Del(BiTree Node)
{
if(Node->lchild==NULL&&Node->rchild==NULL)
{
free(Node);
return NULL;
}
else if(Node->lchild==NULL)
{
free(Node);
return Node->rchild;
}
else if(Node->rchild==NULL)
{
free(Node);
return Node->lchild;
}
else
{
BiTree p=Node,q=Node->lchild;
while(q->rchild)
{
p=q;
q=q->rchild;
}
Node->data=q->data;
if(Node==p)
{
p->lchild=q->lchild;
}
else
{
p->rchild=q->lchild;
}
free(q);
return Node;
}
}
BiTree Delete(BiTree Node,int key)
{
if(!Node)
{
Node=NULL;
}
else
{
if(key<Node->data)
{
Node->lchild=Delete(Node->lchild,key);
}
else if(key>Node->data)
{
Node->rchild=Delete(Node->rchild,key);
}
else if(key==Node->data)
{
Node=Del(Node);
}
return Node;
}
}
void see(BiTree Node)
{
if(!Node)
{
return;
}
else
{
see(Node->lchild);
printf("%d ",Node->data);
see(Node->rchild);
}
}
void main()
{
int array[10]={62,88,58,47,35,73,51,99,37,93};
BiTree T=NULL;
for(int i=0;i<10;i++)
{
T=search(T,array[i]);
}
see(T);
printf("\n");
Delete(T,99);
see(T);
}