#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); } } } }View Code