treenode — предупреждение C4715: не все пути управления возвращают значение переполнения стека

я сделал две функции, одна для поиска и возврата наименьшего ключа в красно-черном дереве, а другая возвращает указатель на конкретный узел с ключом этого узла в качестве входных данных. Эти функции прекрасно работают со всеми узлами, кроме узлов с самым высоким ключом и самый низкий ключ. Программа перестает работать и выдает предупреждение C4716.
ключи
int array [] = {50, 26, 45, 34, 23, 78, 84, 93, 14, 16, 100, 57, 62};

int Tree::findsmallest()
{
return  findsmallestprivate(root);
}

int Tree::findsmallestprivate(node* ptr)
{
if (root != NULL)
{
if (ptr->left != NULL)
{
findsmallestprivate(ptr->left);
}
else
{
return ptr->key;
}
}
else
{
cout << "There was no tree" << endl;
return -1;
}
}
Tree::node* Tree::returnnode(int key)
{
return returnnodepri(key, root);
}
Tree::node* Tree::returnnodepri(int key, node* ptr)
{
if (ptr->key == key)
{
return ptr;
}
else if (ptr->key < key)
{
returnnodepri(key, ptr->right);
}
else if (ptr->key > key)
{
returnnodepri(key, ptr->left);
}
else
{
return NULL;
}
}

-2

Решение

В if (ptr->left != NULL) вы не можете вернуть значение, как говорит компилятор. Вам необходимо вернуть значение.

1

Другие решения

В findsmallestprivate:

Если условие ptr->left != NULL держит, вы ничего не возвращаете. Ты просто бежишь findsmallestprivate(ptr->left); и затем выйдите, но не возвращайте ожидаемый int,

warning C4715: not all control paths return a value означает, что у вас есть функция, которая может не возвращать значение иногда в зависимости от его ввода.

Ваши другие проблемы такие же, как с findsmallestprivate,

В returnnodepri:

В случае ptr->key < key или же ptr->key > key ты не вернешься ожидаемый Tree::node*, Ты бежишь returnnodepri, но не возвращает никакого значения в результате.

0

По вопросам рекламы [email protected]