在c中从BST删除节点的方法不正确?

时间:2014-05-21 17:48:25

标签: c pointers binary-search-tree performance

我仍然习惯于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;
}
}

0 个答案:

没有答案