//删除以bt为根的子树
void DeleteXTree(BiTree bt){
if(bt){
DeleteXTree(bt->lchild);
DeleteXTree(bt->rchild);
free(bt);
}
}
//在二叉树上查找所有以x为元素值的结点,并删除以其为根的子树
void Search(Bitree bt,ElemType x){
BiTree Q[];
if(bt){
if(bt->data==x){
DeleteXTree(bt);
exit(0); //操作完成,退出程序
}
InitQueue(Q);
EnQueue(Q,bt);
while(!IsEmpt(Q)){
Dequeue(Q,p);
if(p->lchild){
if(p->lchild->data==x){
DeleteXTree(p);
p->lchild == NULL; //父节点左子女置空
}
else
EnQueue(p->lchild);
}
if(p->rchild){
if(p->rchild->data==x){
DeleteXTree(p);
p->rchild == NULL;
}
else
EnQueue(p->rchild);
}
}
}
}
删除以元素x为根的子树:(后序遍历(删除x的子树)+层序遍历(搜x结点))
思路:要删除以x为根的子树,同上题左右子树交换的思路,要使用后序遍历(要从叶子节点开始删除),要遍历整个树搜索data域为x的结点,这里使用层序遍历