1

目前,当我调用此函数时,它会删除所有子节点并释放我传递给它的节点的内存,但该节点仍链接到它的父节点并包含垃圾。
我需要能够将我传递的节点(左或右子节点)的父节点设置为等于,NULL以便程序在遍历树时不会崩溃。

这是我已经拥有的代码:

void emptySubtree(BinaryNode* node) {
    if (node == NULL)
        return;

    emptySubtree(node->left);
    emptySubtree(node->right);
    free(node);
}

这是我的函数调用:emptySubtree(tree->root->left)

4

2 回答 2

1
void emptySubtree(BinaryNode* node){
    if (node == NULL)
       return;
    else{
        emptySubtree(node->left);
        emptySubtree(node->right);
    }
    free(node);
    node = NULL;
}

尝试将指针节点设置为空。免费通话后的良好练习。

于 2014-11-06T03:35:45.390 回答
1
void emptySubtree(BinaryNode **pNode)
{
    BinaryNode *node = *pNode;

    if (node == NULL)
        return;

    emptySubtree(&node->left);
    emptySubtree(&node->right);
    free(node);
    *pNode = NULL;
}

打电话给emptySubtree(&tree->root->left);

或者更简单:

// This is your function, renamed.
void emptySubtreeHelper(BinaryNode* node) {
    if (node == NULL)
        return;

    emptySubtreeHelper(node->left);
    emptySubtreeHelper(node->right);
    free(node);
}

void emptySubtree(BinaryNode **pNode) {
    emptySubtreeHelper(*pNode);
    *pNode = NULL;
}

再次调用emptySubtree(&tree->root->left);

于 2014-11-06T07:23:20.750 回答