Функция поиска для дерева
Я работаю с троичным поисковым деревом. Следующий код должен дать вам представление о том, как выглядит дерево. Каждый лист будет содержать указатель на связанный список, который содержит указатель на головной узел. Каждый лист может иметь максимум 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, даже если вы что-то находите.