Функция поиска для дерева

Я работаю с троичным поисковым деревом. Следующий код должен дать вам представление о том, как выглядит дерево. Каждый лист будет содержать указатель на связанный список, который содержит указатель на головной узел. Каждый лист может иметь максимум 3 узла. Поэтому после того, как корневой лист будет заполнен 3 значениями данных, следующее значение, если оно меньше первого узла, будет вставлено влево, если оно больше, оно будет вставлено вправо, и если оно будет посередине, оно будет вставить в центр ребенка.

struct data
{
  int val;
};


struct node
{
  struct node* next;
  struct data* dta;
};

struct linkedList
{
  int size;
  struct node *head;
};

struct leaf
{
  struct linkedList* ll;
  struct leaf* left;
  struct leaf* right;
  struct leaf* center;
  struct leaf* parent;
};

struct tree
{
  struct leaf* root;
};

В настоящее время я пытаюсь создать функцию, которая принимает в качестве входных данных дерево и значение int. Затем он проверяет каждый лист дерева, чтобы узнать, равен ли какой-либо лист значению int, и если он это сделает, он вернет 1 и 0 в противном случае.

Ниже мой код

int totalLeaf(struct leaf *lf)
{
  int sum = 0;
  struct node *temp = lf->ll->head;
  while(temp!=NULL)
  {
    sum = sum + temp->dta->val;
    temp = temp->next;
  }
  printf("sum is :  %d\n",sum);
  return sum;
}

int searchTotal(struct tree *tr,int total)
{
  if(tr->root == NULL)
  {
    return 0;
  }
  else
  {
    return searchTotal_r(tr->root,total);
  }
}

int searchTotal_r(struct leaf *lf,int total)
{
  if(lf==NULL)
  {
    return 0;
  }
  if(totalLeaf(lf) == total)
  {
    return 1;
  }
  else
  {
    searchTotal_r(lf->left,total);
    searchTotal_r(lf->center,total);
    searchTotal_r(lf->right,total);
  }

  return 0;
}

Кто-нибудь может подсказать, где я ошибся и как я могу решить эту проблему?

1 ответ

Решение
  else
  {
    searchTotal_r(lf->left,total);
    searchTotal_r(lf->center,total);
    searchTotal_r(lf->right,total);
  }

Изменить на:

  else
  {
    return searchTotal_r(lf->left,total) ||
           searchTotal_r(lf->center,total) ||
           searchTotal_r(lf->right,total);
  }

Как у вас сейчас, рекурсивный поиск на самом деле не имеет значения, потому что вы всегда возвращаете 0, даже если вы что-то находите.

Другие вопросы по тегам