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