我目前正在做一个需要使用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;
}
我不知道您遇到了什么类型的错误,但有一些事情需要修复。
你需要决定当malloc
失败。现在你正在设置height
在这种情况下,在空指针上。
If height(NULL)
返回 0,那么您将新节点的高度设置为 0,然后设置为 1。如果它返回 -1,则这些分配之一是多余的。
而你正在呼唤strcmp
无缘无故两次。
我怀疑真正的问题埋藏在s_rotate_left
, d_rotate_left
, s_rotate_right
, or d_rotate_right
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)