我仍然习惯于C编码,我想知道我是否正在执行BST节点删除/正确释放内存。关于使用所有句柄(我被告知调用指针指针)和指针的事情让我怀疑做错了事情,例如当我释放指针时,然后将其设置为NULL(那,我几乎肯定是错的) 。
任何有C超越的人,我都会喜欢对这些方法的批评/反馈。
void killTree(node **node)
{
if(!(*node)){}
else
{
killTree(&((*node)->left));
killTree(&((*node)->right));
printf("DEBUG: Deleting pointer to node of value %d from mem\n", (*node)->key);
free(*node);
(*node) = NULL;
}
}
node** searchTree(node **root, int value)
{
if(*root)
{
if ((*root)->key == value) return root;
else if((*root)->key > value) searchTree(&((*root)->left), value);
else searchTree(&((*root)->right), value);
}
else return NULL;
}
void removeNode(node **root, int value)
{
node **n = searchTree(root, value);
if((*n) == NULL)
{
return;
}
if((*n)->left == NULL && (*n)->right ==NULL)
{
free(*n);
(*n) = NULL;
}
else if((*n)->right == NULL)
{
(*n) = (*n)->left;
}
else if((*n)->left == NULL)
{
(*n) = (*n)->right;
}
}