已知一棵二叉树以二叉链表为存储结构,编写如下程序:对于树中每一个元素值为x的结点,删去以它为根的子

2024-11-16 09:51:02
推荐回答(2个)
回答(1):

先前序遍历整个二叉树,找到符合要求的结点,然后后序遍历该结点的整个子树,逐一释放结点。

//假设二叉树结构体如下
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;
    }
}

回答(2):

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;
}
//