C语言中的AVL树

我目前正在做一个需要使用AVL树的项目,我为avl编写的插入函数似乎不起作用,它最多可用于3或4个节点;

我真的很感谢你的帮助尝试如下

Tree insert(Tree t,char name[80],int num) { if(t==NULL) { t = (Tree)malloc(sizeof(struct node)); if(t! = NULL) { strcpy(t->name,name); t->num = num; t->left = NULL; t->right = NULL; t->height = 0; } } else if(strcmp(name,t->name)left = insert(t->left,name,num); if((height(t->left)-height(t->right))==2) if(strcmp(name,t->left->name)name)>0) { t->right = insert(t->right,name,num); if((height(t->right)-height(t->left))==2) if(strcmp(name,t->right->name)>0) t = s_rotate_right(t); else t = d_rotate_right(t); } t->height = max(height(t->left),height(t->right))+1; return t; } 

我不知道你会得到什么样的错误,但有几件事需要修复。

malloc失败时,您需要确定要执行的操作。 现在你在这种情况下在空指针上设置height

如果height(NULL)返回0,那么您将新节点上的高度设置为0,然后设置为1.如果它返回-1,则其中一个赋值是多余的。

并且你没有充分的理由两次调用strcmp

我怀疑真正的问题隐藏在s_rotate_leftd_rotate_lefts_rotate_rightd_rotate_right