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顺序遍历方法来释放每个节点,但是当我尝试使用我的Post order函数时,它似乎无法正常工作。它根本不释放任何节点,并且对于我给它的每个情况,它将继续向前一个树添加节点,直到它不可避免地崩溃。
这是我试图使用的Post Order遍历函数:
void postOrderFree(struct node* root){
if(root != NULL) {
postOrderFree(root->left);
postOrderFree(root->right);
free(root->data);
}
}
任何和所有的帮助将不胜感激,包括风格,如果有任何裁员!
答案 0 :(得分:2)
由于您为节点而不是数据分配了内存,因此您不应释放节点数据,而应释放节点本身:
void postOrderFree(struct node* root){
if(root != NULL) {
postOrderFree( root->left );
postOrderFree( root->right );
free( root );
}
}
答案 1 :(得分:1)
你的postOrderFree()函数释放了错误的东西..
应该是
free(root);
而不是
free(root->data);
释放'二叉树后,必须将根节点设置回NULL,否则它将是一个悬空指针。 那就是你必须这样做:
postOrderFree(my_root);
my_root = NULL;