Problema en arboles binarios de busqueda

Iniciado por Josh13, 18 Mayo 2018, 20:42 PM

0 Miembros y 1 Visitante están viendo este tema.

Josh13

Tengo el mismo error en dos funciones, me sale "no match for operator ==" con cualquier signo en si también con >. He leído que es porque tengo que dar un valor al string, pero la verdad que no se que valor dar exactamente.

El ejercicio 1 dice así: Devuelve el objeto de tipo Pelicula cuyo título coincide con el string recibido. En caso de que no se encuentre el título en el catálogo, se devolverá una película vacía, sin datos.

Este es el primer código:

Pelicula buscar(pNodo nodo, string t){
   Pelicula p;
   if(nodo != NULL){
      if(nodo->clave == t)
         return p;
      else {
         if(nodo->clave > t)
            buscar(nodo->iz, t);
         else buscar(nodo->de, t);
      }
   }
   return p;
}

Pelicula Filmoteca::buscarPelicula (string t) {
   Pelicula p;
   buscar(raiz, t);
   return p;
}


Y el segundo código:
En este caso me da el mismo error pero en "nodo->info << endl"

void mostrar(pNodo &nodo){
   if(nodo != NULL){
      mostrar(nodo->iz);
      cout << " " << nodo->info << endl;
      mostrar(nodo->de);
   }
}

void Filmoteca::mostrarFilmoteca () {
      mostrar(raiz);
}

Serapis

#1
Tienes varios errores.

El primordial es la sintaxis: Debes poner las llaves y los finales de sentencia donde corresponden, sin omitir ninguno, no son opcionales...

Otro error (éste semántico)...  mirando por ejemplo la función Buscar... 'p' siempre es nulo, nunca se le asigna nada, incluso aunque se encuentre la clave buscada.
Del mismo estilo es que aunque (ésta) la función devuelva algo, luego 'nadie' está allí para recoger la 'pelota' que desde aquí se envía...
En la segunda función (mostrar) pasas el nodo por referencia, pero aquí (buscar) por valor, podría por ello parecer... pero no puede ser una omisión a causa de esto, ya que declaras la función como 'no vacante' (no es void) y explícitamente 'devuelves' p.

Otro medio error, menos importante es que en la llamada inicial no se verifica si la clave recibida es nula. Asi en 'BuscarPelicula', si comprueba ese parámetro, no s epierde tiempo luego en ser revisado más adelante, ni ejecuta más acciones innecesarias si ya desde el principio resulta innecesario. Imagina que vas a una ferretería a comprar un pegamento, el tipo no vende pegamento, pero se larga al almacen a buscar, para después de media decirte que 'aquí no vendemos pegamento', acaso no hubieras preferido que empezara por ahí???.

Corrige todo lo previo y probableente los cambios, ya te lo dejen más libre de errores...

Luego donde dices: "En este caso me da el mismo error pero en "nodo->info << endl"", sintácticamente es correcto, luego si existe un error será semántico. Como por ejemplo: ¿Qué tipo de datos aloja nodo.info? o uno más prosaico: qué crees que debe mostrarse si ese nodo es nulo y no existe pero aún así se insiste en acceder a uno de sus miembros?.

Nota que no es lo mismo un nodo vacío que un nodo nulo. Un nodo vacío, es un nodo creado, pero al que (todavía) no se le han introducido datos... luego permite acceder a sus miembros y mostrar lo que tenga (por ejemplo una cadena vacía), en cambio un nodo nulo, es un nodo inexistente al momento, no se ha alogado espacio en memoria para él.