C语言中的AVL树

时间:2010-04-09 12:44:36

标签: c algorithm data-structures avl-tree

我目前正在做一个需要使用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;
}

1 个答案:

答案 0 :(得分:1)

我不知道你会遇到什么样的错误,但还有一些事情需要修复。

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

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

你没有充分理由两次致电strcmp

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