#include <stdio.h>
//删除以x元素为根的所有子树
void Del_x(Bitree bt) //后序遍历删除以bt为根的子树
{
if(bt)
{
Del_x(bt->lchild);
Del_x(bt->rchlid);
free(bt);
}
}
//在二叉树上查找所有以x为元素值的结点,并删除以其为根的子树
void Search_x(Bitree bt,Elempty x)
{
Bitree Q[]; //Q是存放二叉树结点指针的队列。容量足够大
if(bt) //在树非空的情况下进行
{
if(bt->data==x) //若根结点的值为x,则删除整棵树
{
Del_x(bt);
exit(0);
}
InitQueue(Q);
EnQueue(Q,bt);
while(!IsEmpty(Q))
{
DeQueue(Q,p); //删除队头元素,并用p返回
if(p->lchild) //如果右子树不空
{
if(p->lchild->data==x) //左子树符合删除左子树
{
Del_x(p->lchild);
p->lchild==NULL;
}
else
EnQueue(Q,p->lchild); //父节点的左子女置空
}
if(p->rchild) //如果右子树不空
{
if(p->rchild->data==x)
{
Del_x(p->rchild);
p->rchild=NULL;
}
else
EnQueue(Q,p->rchlid);
}
}
}
}