Функция balance () не работает должным образом - PullRequest
0 голосов
/ 29 ноября 2018

В функции bf () я попытался присвоить коэффициенты баланса каждому узлу моего AVL дерева .Первая итерация, когда я вызываю функцию из функции main (), передавая дерево, работает отлично.Но после первой рекурсии функция balance () не отвечает, и код не идет дальше.Я напечатал 'g' и 'm' букв, чтобы знать, где работает код. 'g' печатается только один раз, когда я вызываю основную функцию, но 'm' даже не один раз.

int balance(struct node *tree)
{
  int lh,rh;
  if(tree==NULL)
  return 0;
  else
  {
  lh=balance(tree->left);
  rh=balance(tree->right);
  return (lh+1)-(rh+1);
  }
  }

void bf(struct node *tree)
      {
        tree->bfactor=balance(tree);  //not proceeding after this step after first recursion.
        printf("g");
        bf(tree->left);
        printf("m");
        bf(tree->right);
      }

1 Ответ

0 голосов
/ 30 ноября 2018

Функция bf () должна работать, только если дерево не равно NULL.Просто добавив это условие в функцию bf (), она прекрасно работает.

void bf(struct node *tree)
  {  
       if(tree!=NULL)
       {
           tree->bfactor=balance(tree);
           bf(tree->left);
           bf(tree->right);
       }
  }
...