将 free() 与数据结构结合使用

问题描述 投票:0回答:1

我没有计算机科学背景,一直在尝试使用 C 编程来学习数据结构。
我制作了一些二叉树程序,并意识到我已经使用了 malloc left 和 right (双关语:))而没有使用 free(),因为我不知道我实际创建了多少个节点。
我的问题相当基本,而且几乎是愚蠢的。我是否必须编写一个类似于 print 函数的函数来访问树的每个节点并单独释放它,或者仅释放(根)就足够了,因为无论如何所有后续指针都会丢失?
非常感谢大家。

c data-structures malloc binary-tree free
1个回答
0
投票

在C中使用malloc()为二叉树中的节点分配内存时,调用free(root)不会自动释放子节点的内存。树结构由指针组成,因此虽然根将被释放,但左右子指针仍可能指向尚未释放的内存。

要正确释放所有节点,您应该遍历树并单独释放每个节点。这通常是使用后序遍历来完成的(在释放当前节点之前访问左子节点和右子节点)。以下是如何实现这一点的示例:

void freeTree(struct Node* root) {
    if (root == NULL)
        return;

    freeTree(root->left);  // Free left subtree
    freeTree(root->right); // Free right subtree
    free(root);            // Free current node
}
© www.soinside.com 2019 - 2024. All rights reserved.