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_left
, d_rotate_left
, s_rotate_right
或d_rotate_right
。