我是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)
它似乎仍然是指针......但我无法弄清楚出了什么问题。
提前致谢!!