先前序遍历整个二叉树,找到符合要求的结点,然后后序遍历该结点的整个子树,逐一释放结点。
//假设二叉树结构体如下
struct binTree
{
int data;
binTree *lchild;
binTree *rchild;
}*BiTree;
//函数如下
BiTree find(BiTree node, int x)
{
if(node)
{
if(node->data==x) delete(node);
else
{
find(node->lchild);
find(node->rchild);
}
}
}
BiTree delete(BiTree tree)
{
if(node)
{
delete(node->lchild);
delete(node->rchild);
free(node);
node=NULL;
}
}
void bt_clear(BiTree root){
if(!root) return;
bt_clear(root->left);
bt_clear(root->right);
free(root);
root=NULL;
}
BiNode* bt_removeX(BiTree root,char x)
{
if(root==NULL) return NULL;
if(root->data==x) {
bt_clear(root);
return NULL;
}
root->left=bt_removeX(root->left,x);
root->right=bt_removeX(root->right,x);
return root;
}
//