我目前正在做一个需要使用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)<0)
{
t->left = insert(t->left,name,num);
if((height(t->left)-height(t->right))==2)
if(strcmp(name,t->left->name)<0)
t = s_rotate_left(t);
else
t = d_rotate_left(t);
}
else if(strcmp(name,t->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;
}
答案 0 :(得分:1)
我不知道你会遇到什么样的错误,但还有一些事情需要修复。
当malloc
失败时,您需要确定要执行的操作。现在你在这种情况下在空指针上设置height
。
如果height(NULL)
返回0,那么您将新节点上的高度设置为0然后设置为1.如果它返回-1,则其中一个分配是多余的。
你没有充分理由两次致电strcmp
。
我怀疑真正的问题隐藏在s_rotate_left
,d_rotate_left
,s_rotate_right
或d_rotate_right
中。