2

私は現在、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;
}
4

1 に答える 1

1

どのようなエラーが発生しているのかわかりませんが、修正が必要なことがいくつかあります。

失敗したときに何をするかを決める必要がありmallocます。現在height、その場合はnullポインタを設定しています。

0を返す場合height(NULL)は、新しいノードの高さを0に設定してから1に設定します。-1を返す場合、これらの割り当ての1つは冗長です。

そして、あなたはstrcmp正当な理由もなく2回電話をかけています。

本当の問題は、、、、またはに埋もれているs_rotate_leftのではないかと思います。d_rotate_lefts_rotate_rightd_rotate_right

于 2010-04-09T15:28:39.003 に答える