Estoy haciendo una práctica de árboles y cuando pretendo buscar e insertar los datos en el primero de los casos no me busca bien las cosas y en el segundo me inserta los datos solamente por la izquierda en el arbol binario.
Estos son los códigos:
1) Insertar
Código:
void Arbol::InsertarNodo (Nodo *dat)
{
Nodo *padre = NULL;
actual = raiz;
bool continuar =true;
while(!esVacioActual() && continuar){
padre = actual;
if(dat->getDato()->getTitulo() > actual->getDato()->getTitulo() )
{
actual = actual->derecha;
}
else
if(dat->getDato()->getTitulo() < actual->getDato()->getTitulo())
{
actual = actual->izquierda;
}
else
if (dat->getDato()->getTitulo() == actual->getDato()->getTitulo())
continuar=false;
}
//if(!esVacio(actual)) (actual)) return;
if(esVacio(padre))
{
raiz = new Nodo (dat->getDato());
}
else
if(dat->getDato()->getTitulo() < padre->getDato()->getTitulo())
{
cout << dat->getDato()->getTitulo() << "es menor que " << padre->getDato()->getTitulo();
padre->izquierda = new Nodo(dat->getDato());
}
else
if(dat->getDato()->getTitulo() > padre->getDato()->getTitulo())
{
padre->derecha = new Nodo(dat->getDato());
cout << dat->getDato()->getTitulo() << "es mayor que " << padre->getDato()->getTitulo();
}
}
2) Buscar
Código:
Libro * Arbol::BuscarLibro(string titulo)
{
Nodo *padre = NULL;
actual = raiz;
bool continuar =true;
while(!esVacioActual() && continuar){
padre = actual;
if(titulo > actual->getDato()->getTitulo() )
{
actual = actual->derecha;
}
else
if(titulo < actual->getDato()->getTitulo())
{
actual = actual->izquierda;
}
else
if (titulo == actual->getDato()->getTitulo())
continuar=false;
}
return padre->getDato();
}
Básicamente la práctica que estoy realizando consta de una biblioteca en la que pretendo insertar los datos que leo por teclado en un árbol binario previamente habiendo creado una clase Libro en la que se encuentran todos sus atributos (libro, ISBN...), etcétera. Y bueno el siguiente paso que estoy realizando es el de buscar.
¿Me podría echar alguno una mano para encontrar el fallo en los métodos? Muchas gracias de antemano!
saludos.