Я строю программу, основанную на бинарных деревьях поиска.У меня проблемы с поиском братьев и сестер.Всякий раз, когда у дерева есть родной брат, оно работает отлично, никаких проблем.Но, если у него нет родного брата, он вылетает и не произносит сообщение «No tiene hermanos», что означает, что у него нет братьев.
Терминология:
izq = слева, der = right, nodo = узел, hermano = sibling
Я не понимаю, почему это не работает должным образом, я пытался быть общим,Конкретно, моих возможностей недостаточно.Я попытался включить операторы if, out, изменив код с родительским узлом, изменив порядок ifs.Я изменил функцию в void, изменил возврат, возвратил общее сообщение, нет возврата при перемещении влево и вправо, idk.
bool Hermanos (Nodo *arbol, int n) {
if (arbol == NULL){
return false;
}
else if ((arbol->der->dato == n) || (arbol->izq->dato == n )) {
if ( arbol->der->dato == n && arbol->izq != NULL){
cout<<arbol->izq->dato;
}
else if (arbol->izq->dato == n && arbol->der != NULL){
cout<<arbol->der->dato;
}
else if ((arbol->izq == NULL) || (arbol->der == NULL)){
cout<<"No tiene hermanos";
}
return true;
}
else if (n < arbol -> dato) {
return Hermanos(arbol->izq, n);
}
else {
return Hermanos(arbol->der, n);
}
}
Допустим, у меня есть 2 узла, 5 и 20, являющиеся 20 правильными детьми.Если я посмотрю на 20, он должен сказать: «У него нет родного брата».