2014-10-11 6 views
-2

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

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; 
} 
} 

ответ

1

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

+0

yup тот сработал .thanks! –

0

В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, но не возвращаете в результате какое-либо значение.