ниже является функцией searchVal
для поиска значения в двоичном дереве. узлы двоичного дерева хранятся в векторе nodeVec
с первым объектом в векторе как root., почему эта функция не возвращает ожидаемое значение
структура узлов
class bst{
public:
//other functions..//
int searchVal(int)
private:
bst *lLink;
int info;
bst *rLink;
}
вызова часть в главном
cout << "Enter Value to search ";
int val;
cin >> val;
int ret = nodeVec[0].searchVal(val);
if (ret == 2)
cout << "Value Not Found" << endl << endl;
else
cout << "Value Found" << endl << endl;
Функция
int bst::searchVal(int val)
{
if (info != val)
{
if (info > val)
{
if (lLink != NULL)
lLink->searchVal(val);
else
return 2;
}
if (info < val)
{
if (rLink != NULL)
rLink->searchVal(val);
else
return 2;
}
}
if (info == val)
return 1;
}
во время отладки (с использованием codeBlocks) я заметил, что после выполнения любого условия, например, если выполнено условие info==val
, указатель выполнения (стрелка в IDE, указывающей на обрабатываемую линию) заканчивается searchVal
, после чего он перейдите к ближайшему if
(с конца), однако он не входит в блок этого условия. Он всегда возвращает info
хранится в корневом узле в ret
не 1
или 2
Как вы инициализируете 'info'? –
@VusP - это еще одна часть всего кода, который использует вектор для принятия значений от пользователя и от этого вектора, создает глобальный вектор «nodeVec» объектов и связывает узлы (используя rLink, часть lLink) в соответствии с критериями, требуемыми для создать двоичное дерево поиска. Но это не проблема, каждая часть работает нормально, даже обход для поиска значения хорошо работает, только проблема заключается в том, что 'searchVal' не возвращает ожидаемое значение i.e,' 1' или '2' – Rahul
у вас уже есть решение Peter. Я просто подумал, что, возможно, ему нужно что-то сделать с неправильной инициализацией 'info'. –