Это не работает;
Вот один из возможных решений в код: (обновлено - этот код в настоящее время составляет)
Резюме - последние две строк ваших результатов коды отменяемых во время «decursion» (когда рекурсия разгадки).
int height_target(node* current, int data, int height)
{
int retVal = 0;
do {
if (nullptr == current)
break; // 0 indicates not found
if (current->info == data) { retVal = height; break; }
// found the node at 'height'; now de-curse
retVal = height_target (current->left, data, height+1);
if (retVal) break; // found data in left branch
retVal = height_target(current->right, data, height+1);
if(retVal) break; // found data in right branch
}while(0);
return retVal;
}
Представьте ваш поиск элемент найден 5 слоев «вверх», так что высокая рекурсия возвращает 5.
На слое 4, данные не были найдены, так что ваш код, то искал как левую ветвь и правая ветвь.
С любой ветвью, когда ваш код возвращен (из уровня 5) со значением «5», ваш код просто отменил результат.
В этом возможном решении я проверил retVal после возвращения с левой или с правой стороны. Теперь, если возвращаемое значение (из уровня 5) не равно нулю, функция вернет ненулевое значение; в конечном счете, вытащив значение из стека, полностью назад «вниз» до нижней части вашей рекурсии.
Возможно упрощенным след вызов может иллюстрировать:
height_target (., ., 1); // first call, data not found at root
| height_target (., ., 2); // recursive call, data not found
| | height_target (., ., 3); // recurse, not found
| | | height_target (., ., 4); // recurse, not found
| | | | height_target (., data, 5); // found! 'decursion' begins
| | | | |
| | | | returns 5 // height 5 returns 5
| | | returns 5 // height 4 return 5
| | returns 5 // height 3 returns 5
| returns 5 // height 2 returns 5
returns 5 // height 1 returns 5
Первый звонок теперь возвращает 5.
Добро пожаловать в StackOverflow. Прочтите и следуйте инструкциям по отправке в справочной документации. [Минимальный, полный, проверяемый пример] (http://stackoverflow.com/help/mcve) применим здесь. Мы не можем эффективно помочь вам, пока вы не опубликуете свой код и не сможете точно описать проблему. «он не работает» не является достаточным описанием проблемы. – Prune