gpt4 book ai didi

c - 释放分配的二叉树 - C 编程

转载 作者:太空宇宙 更新时间:2023-11-04 07:24:10 25 4
gpt4 key购买 nike

struct node {
int data;
struct node* left;
struct node* right;
};

创建要插入的节点函数:

struct node* create_node(int val) {

// Allocate space for the node, set the fields.
struct node* temp;
temp = (struct node*)malloc(sizeof(struct node));
temp->data = val;
temp->left = NULL;
temp->right = NULL;

return temp; // Return a pointer to the created node.
}

我的插入节点函数:

struct node* insert(struct node *root, struct node *element) {

if (root == NULL)
return element;
else {

// element should be inserted to the right.
if (element->data > root->data) {

// There is a right subtree to insert the node.
if (root->right != NULL)
root->right = insert(root->right, element);

// Place the node directly to the right of root.
else
root->right = element;
}

// element should be inserted to the left.
else {

// There is a left subtree to insert the node.
if (root->left != NULL)
root->left = insert(root->left, element);

// Place the node directly to the left of root.
else
root->left = element;
}

// Return the root pointer of the updated tree.
return root;
}
}

我将节点插入树的主要位置:

    scanf("%d", &numCases);

for(i=0; i<numCases;i++){

scanf("%d", &numNodes);

for(j=0; j < numNodes; j++){
scanf("%d", &val);
temp_node = create_node(val);
my_root = insert(my_root, temp_node);
}
// calling the function to free the tree after all nodes have been inserted
postOrderFree(my_root);

现在我的计划是使用 Post order 遍历方法来释放每个节点,但是当我尝试使用我的 Post order 函数时它似乎无法正常工作。它根本不会释放任何节点,对于我给出的每种情况,它都会不断向前一棵树添加节点,直到它不可避免地崩溃。

这是我尝试使用的后序遍历函数:

void postOrderFree(struct node* root){
if(root != NULL) {
postOrderFree(root->left);
postOrderFree(root->right);
free(root->data);
}
}

我们将不胜感激任何和所有帮助,包括样式以及是否有任何冗余!

最佳答案

您的 postOrderFree() 函数释放了错误的东西..

应该是

 free(root);

代替

  free(root->data);

在你释放二叉树之后,你必须将你的根节点也设置回 NULL,否则它将是一个悬空指针。那就是你必须这样做:

 postOrderFree(my_root);
my_root = NULL;

关于c - 释放分配的二叉树 - C 编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19575049/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com