无法释放avltree中的根

时间:2018-05-01 15:53:57

标签: c pointers tree free

我是C的新学习者,并且无法清楚地理解指针或其他一些东西,所以我试图在C中实现AVLTree,但我的代码中有错误。有些问题可能是愚蠢的,但我对这些事情感到困惑。对于这个,我想在AVL树中释放节点。但是我对指针有很大的困难,并且自由和其他。我希望你能够耐心等待我的错。

这是我的AVL树结构:

    typedef struct AVLTreeNode {
    int key; 
    int value;  
    int height; 
    struct AVLTreeNode *parent; 
    struct AVLTreeNode *left; 
    struct AVLTreeNode *right; 
} AVLTreeNode;

typedef struct AVLTree{
    int  size;      // count of items in avl tree
    AVLTreeNode *root; // root
} AVLTree;

AVLTreeNode *newAVLTreeNode(int k, int v )
{
    AVLTreeNode *new;
    new = malloc(sizeof(AVLTreeNode));
    assert(new != NULL);
    new->key = k;
    new->value = v;
    new->height = 0; // height of this new node is set to 0
    new->left = NULL; // this node has no child
    new->right = NULL;
    new->parent = NULL; // no parent
    return new;
}

AVLTree *newAVLTree()
{
    AVLTree *T;
    T = malloc(sizeof (AVLTree));
    assert (T != NULL);
    T->size = 0;
    T->root = NULL;
    return T;
}

我的自由功能是:

void destroy_avltree(AVLTreeNode *N)
 {
    if (N->left!=NULL) destroy_avltree(N->left);
    if (N->right!=NULL) destroy_avltree(N->right);
    if (N->parent && N->key < N->parent->key) N->parent->left = NULL;
    if (N->parent && N->key > N->parent->key) N->parent->right = NULL;
    free(N);
 }

// put your time complexity analysis for freeAVLTree() here
void FreeAVLTree(AVLTree *T)
{
    assert(T!=NULL);
    destroy_avltree(T->root);
    free(T);
}

我可以释放除根之外的任何其他节点。 这是我的结果可能看起来像:

预订树: (7,7)(3,3)(1,1)(0,0)(2,2)(5,5)(4,4)(6,6)(11,11)(9,9) (8,8)(10,10)(13,13)(12,12)(14,14)

免费后: (39674416,0)

它似乎仍然是指针......但我无法弄清楚出了什么问题。

提前致谢!!

0 个答案:

没有答案